您的位置:首页 > 数据库

项目实战(二)—你的数据库灵活吗?

2013-12-05 21:35 260 查看
最近做项目的时候遇到一个这样的问题,一个表中由四个字段都是一对多的关系。如果把四个字段放入到一张表中,肯定存在很多冗余数据。想想那怎么办呢?分成四张表,用主外键关联起来,但太不灵活了。想到考试系统中用到的中间表,想这里也可以用到。现在比较一下三种建表方式的不同之处吧!

一、实例

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
优点:减少冗余、增加灵活性

通过中间表建立联系,操作时 无论是前置机、端口、组,还是具体的某个数据出现问题,我们更改时不需要更改两张基本表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: