Home > Database > Mysql Tutorial > body text

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

WBOY
Release: 2016-06-07 15:22:08
Original
1058 people have browsed it

最近做项目的时候遇到一个这样的问题,一个表中由四个字段都是一对多的关系。如果把四个字段放入到一张表中,肯定存在很多冗余数据。想想那怎么办呢?分成四张表,用主外键关联起来,但太不灵活了。想到考试系统中用到的中间表,想这里也可以用到。现在比较

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

一、实例

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

 

优点:减少冗余、增加灵活性

通过中间表建立联系,操作时 无论是前置机、端口、组,还是具体的某个数据出现问题,我们更改时不需要更改两张基本表。


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!