项目实战(二)—你的数据库灵活吗?
最近做项目的时候遇到一个这样的问题,一个表中由四个字段都是一对多的关系。如果把四个字段放入到一张表中,肯定存在很多冗余数据。想想那怎么办呢?分成四张表,用主外键关联起来,但太不灵活了。想到考试系统中用到的中间表,想这里也可以用到。现在比较一下三种建表方式的不同之处吧!
一、实例
1、 表:字段包括粮仓、前置机地址、端口、组、数据,其中粮仓、前置机地址可以唯一标识
2、关系:
(1)一个粮仓容纳多个前置机
(2)一个前置机对应多个端口
(3)一个端口对应多个组
3、假设:
(1) 1号仓中有前置机1和2;
(2)前置机1、2各有2个端口;
(3)每个端口对应的组不同;
二、建表方法
1、方法一:将所有字段放到一张表中
仓 | 前置机 | 端口 | 组 | 数据 |
1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 2 | 2 |
1 | 1 | 2 | 3 | 3 |
1 | 1 | 2 | 4 | 4 |
1 | 2 | 1 | 5 | 5 |
1 | 2 | 1 | 6 | 6 |
1 | 2 | 2 | 7 | 7 |
1 | 2 | 2 | 8 | 8 |
1 | 2 | 2 | 9 | 9 |
大家可以看到,把所有字段放在一张表中,产生很多冗余字段。这仅仅一个仓有9组的情况下,仓和前置机、端口就产生了很多冗余数据,那如果说一个仓有10个前置机、20组呢?
优点:代码简单
缺点:产生很多冗余数据
2、方法二:建立四张表(仓表、前置机表、端口表、组和数据表)
(1)粮仓表
仓表(主键) |
1 |
(2)前置机表
前置机(主键) | 仓表(外键) |
1 | 1 |
2 | 1 |
(3)端口号表
端口 | 前置基表(外键) |
1 | 1 |
2 | 1 |
1 | 2 |
2 | 2 |
(4)组表
组(主键) | 数据 | 端口号(外键) |
1 | 1 | 1 |
2 | 2 | 1 |
3 | 3 | 1 |
4 | 4 | 1 |
5 | 5 | 2 |
6 | 6 | 2 |
7 | 7 | 2 |
8 | 8 | 2 |
9 | 9 | 2 |
优点:减少冗余,查找方便(建立主外键)
缺点:不灵活(如果某个前置机坏了,进行更换,我必须更改前置机表和端口表)
通过主外键联系,操作时会涉及到多张表,耦合性太强。
方法三、建立中间表,解耦和
(1)粮仓表
仓序号 | 仓表 |
1 | 1 |
(2)前置基表
前置机序号 | 前置机 |
1 | 1 |
2 | 2 |
(3)端口表
端口序号 | 端口 |
1 | 1 |
2 | 2 |
3 | 1 |
4 | 2 |
(4)组表
组序号 | 组号 | 数据 |
1 | 1 | 1 |
2 | 2 | 2 |
3 | 3 | 3 |
4 | 4 | 4 |
5 | 5 | 5 |
6 | 6 | 6 |
7 | 7 | 7 |
8 | 8 | 8 |
9 | 9 | 9 |
(5)仓与前置机的中间表
序号 | 仓序号 | 前置机序号 |
1 | 1 | 1 |
2 | 1 | 2 |
(7)前置机与端口中间表
序号 | 前置机序号 | 端口序号 |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 1 |
4 | 2 | 2 |
(8)端口表与组表的中间表
序号 | 端口序号 | 组序号 |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 3 |
4 | 2 | 4 |
5 | 1 | 5 |
6 | 1 | 6 |
7 | 2 | 7 |
8 | 2 | 8 |
9 | 2 | 9 |
优点:减少冗余、增加灵活性
通过中间表建立联系,操作时 无论是前置机、端口、组,还是具体的某个数据出现问题,我们更改时不需要更改两张基本表。
- 06-16卡巴斯基郑启良:支持信创发展是卡巴斯基的重要使命
- 06-16访问管理是确保现代工作场所安全的的五个关键原因
- 06-16零信任安全的演变:彻底改变网络安全策略
- 06-16GitHub上值得关注的20个网络安全项目
- 06-16英国曼彻斯特大学遭遇网络攻击,机密数据或遭窃!
- 06-16调查表明广告软件推送恶意软件感染了六万多个安卓应用程序
- 06-16微软向美国政府提供GPT的大模型,安全性如何保证?
- 06-16如何保护OT环境免受安全威胁?
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复