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

WBOY
풀어 주다: 2016-06-07 15:22:08
원래의
1058명이 탐색했습니다.

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

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

一、实例

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

 

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

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


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!