数据库表关系设计到底如何做最好!(简单关系)

pfworld 2012-10-27 08:22:15
例如:

我要建立一个人员表这个人员拥有手机,以后可能还会有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 长城

就是给每一个子表添加一个主表外键进行关联。
...全文
759 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jAmEs_ 2012-11-19
  • 打赏
  • 举报
回复
不是特别大的应用,感觉不需要过分完美,不要希望设计能一次到位,必须改的时候还是得改的。 ChangeMyself2012的可行。
c2091986 2012-11-16
  • 打赏
  • 举报
回复
关系数据库就是这样吧像DBA_Huangzj说的那样,如果有新列比如在人员设备多一个新列,比如“打印机”什么的,好像真的很麻烦,不知道可以不可以先使用ChangeMyself2012的方法,有新种类的设备需要进入,就建立一个新表,然后把旧表的数据一列列插入进新表 本人小白新手
pfworld 2012-11-12
  • 打赏
  • 举报
回复
有没有回复了!奇怪了!我的帖子为什么没有吸引力呢?
pfworld 2012-11-06
  • 打赏
  • 举报
回复
看了以上各位的方法,也就是说想这种以后可能会扩展的数据库设计最要把各个类型独立起来,然后通过关系表进行连接,这样在添加新的独立表只能加关系表即可?
  • 打赏
  • 举报
回复
这个有很多种设计方法:
1、资产类别表 (id ,类别名称)
2、员工表(员工id,……)
3、资产表 (员工id,资产类别id,说明)
ChangeMyself2012 2012-10-31
  • 打赏
  • 举报
回复
如果人员将来电子产品会很多的话(如果电子成品不多就可以按你上面的方式设计) 个人认为,可以参考下面方式设计

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

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

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

人员电子产品表 --1.'员工编号' 为 人员表(编号)外键 2.'产品类别编号' 为 电子产品类别表(编号)的外键
---------
编号 员工编号 产品类别编号 描述(手机号、或电脑型号)
1 1 2 13329321111
2 1 4 IBM电脑
3 2 1 15123121111
4 2 1 19283828233
我腫了 2012-10-29
  • 打赏
  • 举报
回复

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

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

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

人员_手机
-----------------------------------
ID 人员ID 手机型號ID tel
1 1 1 13329321111
2 2 2 15123121111
3 2 1 19283828233
4 3 1 13923424234

人员_电脑
------------------
ID 人员ID 电脑ID
1 1 1
2 1 2
3 3 3
pfworld 2012-10-29
  • 打赏
  • 举报
回复
怎么老没有回复呢!分不是问题!!
pfworld 2012-10-27
  • 打赏
  • 举报
回复
问题是按照kkkkkxiaofei说的那样以后扩展还要修改数据库!程序修改就麻烦了!以前我就是这么做的!后来改成我事例那个方法了!个人感觉那个方法效率不高!
  • 打赏
  • 举报
回复
你的想法没有什么问题,约束性比较强而已。
比如人员表,你可以把人员的具体信息都放在里面,人员可以有姓名,有手机,有电脑,那么从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
發糞塗牆 2012-10-27
  • 打赏
  • 举报
回复
2005已经支持XML拉
pfworld 2012-10-27
  • 打赏
  • 举报
回复
我用的是MSsql2008
發糞塗牆 2012-10-27
  • 打赏
  • 举报
回复
可以考虑使用xml类型来存放一系列不可预知的值.....。这好像就是xml存在的其中一个优势

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧