读书人

数据库表关系设计到底怎么做最好!(简

发布时间: 2012-12-18 12:43:41 作者: rapoo

数据库表关系设计到底如何做最好!(简单关系)
本帖最后由 pfworld 于 2012-10-27 20:30:04 编辑 例如:

我要建立一个人员表这个人员拥有手机,以后可能还会有2部、3部....。我在查询时会一次列出人员资料和人员包含的手机型号、电话号码等信息。后期我还想扩展到了解人员拥有电脑的情况,还可能扩展人员拥有子女的情况(基本资料不和人员信息相同)。

人员表
---------
ID name
1 张三
2 李四
3 王武

手机表
---------
ID device tel
1 中兴 13329321111
2 联想 15123121111
3 中兴 19283828233
4 中兴 13923424234

电脑表
--------
ID computer
1 联想
2 IBM
3 长城
.....


要查询的结果:

姓名 电话号码 电脑品牌
--------------------------------------------------
张三 13329321111 联想、IBM
李四 15123121111、19283828233 <无>
王武 13923424234 长城

那么这个表关系如何建立呢?以后在扩展也不是太麻烦?


目前是我的方案:

手机表
---------
ID 主ID device tel
1 1 中兴 13329321111
2 2 联想 15123121111
3 2 中兴 19283828233
4 3 中兴 13923424234

电脑表
--------
ID 主ID computer
1 1 联想
2 1 IBM
3 3 长城

就是给每一个子表添加一个主表外键进行关联。

[最优解释]
如果人员将来电子产品会很多的话(如果电子成品不多就可以按你上面的方式设计) 个人认为,可以参考下面方式设计


人员表
---------
编号 名称
1 张三
2 李四
3 王武

电子产品表
---------
编号 名称
1 手机
2 电脑

电子产品类别表--'产品编号' 为 电子产品表(编号)外键
---------
编号 产品编号 名称
1 1 中兴
2 1 联想
3 2 惠普
4 2 IBM
5 2 长城

人员电子产品表--1.'员工编号' 为 人员表(编号)外键 2.'产品类别编号' 为 电子产品类别表(编号)的外键
---------
编号 员工编号 产品类别编号 描述(手机号、或电脑型号)
1 1213329321111
2 14IBM电脑
3 2115123121111
4 2119283828233

[其他解释]
你的想法没有什么问题,约束性比较强而已。
比如人员表,你可以把人员的具体信息都放在里面,人员可以有姓名,有手机,有电脑,那么从E-R图就可以得出,姓名,手机,电脑等字段是属于人员的,那么就可以建立最基本的人员表,如下:
人员表
---------
ID name phone pc
1 张三 A1 B1
2 李四 A2 B2
3 王武 A3 B3


---------
接下来再依次建立手机表,电脑表等等,建立主键外键约束,比如再上面的基础上建立手机表:
--------
手机ID 手机名字
A1 HTC
A2 IPHONE
A3 ZTC
--------
这样你要是查询的时候就方便多了,比如要查询李四的手机是什么牌子的:
select 手机名字 from 人员表,手机表 where 人员表.name='李四' and 人员表.phone=手机表.手机ID
[其他解释]


人员表
-------
ID name
1 张三
2 李四
3 王武

手机型号表
---------
ID device
1 中兴
2 联想

电脑表
-----------
ID computer
1 联想
2 IBM
3 长城

人员_手机
-----------------------------------
ID人员ID手机型IDtel
11113329321111
22215123121111
32119283828233
43113923424234

人员_电脑
------------------
ID人员ID电脑ID
111
212
333

[其他解释]
不是特别大的应用,感觉不需要过分完美,不要希望设计能一次到位,必须改的时候还是得改的。
ChangeMyself2012的可行。
[其他解释]
这个有很多种设计方法:
1、资产类别表 (id ,类别名称)
2、员工表(员工id,……)
3、资产表 (员工id,资产类别id,说明)
[其他解释]
关系数据库就是这样吧像DBA_Huangzj说的那样,如果有新列比如在人员设备多一个新列,比如“打印机”什么的,好像真的很麻烦,不知道可以不可以先使用ChangeMyself2012的方法,有新种类的设备需要进入,就建立一个新表,然后把旧表的数据一列列插入进新表
本人小白新手
[其他解释]
可以考虑使用xml类型来存放一系列不可预知的值.....。这好像就是xml存在的其中一个优势
[其他解释]
2005已经支持XML拉
[其他解释]
我用的是MSsql2008
[其他解释]
问题是按照kkkkkxiaofei说的那样以后扩展还要修改数据库!程序修改就麻烦了!以前我就是这么做的!后来改成我事例那个方法了!个人感觉那个方法效率不高!
[其他解释]
怎么老没有回复呢!分不是问题!!
[其他解释]
看了以上各位的方法,也就是说想这种以后可能会扩展的数据库设计最要把各个类型独立起来,然后通过关系表进行连接,这样在添加新的独立表只能加关系表即可?
[其他解释]
有没有回复了!奇怪了!我的帖子为什么没有吸引力呢?

读书人网 >SQL Server

热点推荐