免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2869 | 回复: 6
打印 上一主题 下一主题

请教一个数据库表的设计方案! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-12 19:18 |只看该作者 |倒序浏览
10可用积分
请教下列要求的数据库表该如何设计:
有N个人(会增加新人)在N个房间(会增加新的房间)使用了20种工具(每个房间工具都一样),每种工具做了10件事情(10件事情也是固定的)!
查询的时候:
查询列出指定的人在指定的房间用指定的工具做的10件事情。

请教这样的表格该如何设计才好呢?

最佳答案

查看完整内容

要减少冗余当然需要多表。需求里有一点没有写清楚,每人能拥有多少房间没说。如果每人只能有一间是1:N(两个表),每人能同时有好多间是M:N(3个表)其他的话每个房间20种工具 → 1:N(加1个表)每种工具做了10件事情 → 1:N(加1个表)不推荐吧工具直接作为房间的属性,或者事情直接作为工具的属性,一方面不利于将来的扩充,另一方面将来查询效率也不会高。

论坛徽章:
0
2 [报告]
发表于 2007-11-12 19:18 |只看该作者
要减少冗余当然需要多表。
需求里有一点没有写清楚,每人能拥有多少房间没说。如果每人只能有一间是1:N(两个表),每人能同时有好多间是M:N(3个表)
其他的话
每个房间20种工具 → 1:N(加1个表)
每种工具做了10件事情 → 1:N(加1个表)
不推荐吧工具直接作为房间的属性,或者事情直接作为工具的属性,一方面不利于将来的扩充,另一方面将来查询效率也不会高。

论坛徽章:
0
3 [报告]
发表于 2007-11-12 20:39 |只看该作者
table `item`

itemId toolId roomId userId

论坛徽章:
0
4 [报告]
发表于 2007-11-12 21:01 |只看该作者
楼上说的我考虑过,但是这样一来,每个人在表中所占的行数最少也有大几十行,而且恐怕也不方便更新。。。我想过多表,但是想来想去想不出一个较好的办法。。。

论坛徽章:
0
5 [报告]
发表于 2007-11-13 10:59 |只看该作者
原帖由 sunnyfun 于 2007-11-13 09:35 发表
要减少冗余当然需要多表。
需求里有一点没有写清楚,每人能拥有多少房间没说。如果每人只能有一间是1:N(两个表),每人能同时有好多间是M:N(3个表)
其他的话
每个房间20种工具 → 1:N(加1个表)
每种工具做了 ...


你的应该是对的,但是我现在有些理解的一知半解,恳请能再详细说明一些吗?

论坛徽章:
0
6 [报告]
发表于 2007-11-13 13:29 |只看该作者
如果人和房间是M:N的话,大致是这样吧:
这里对工具和事情的结构做了简化,即使工具一样,房间不同也认为是不同的东西,事情也是如此。

人员表
字段名说明
编号主键
人员属性1 
人员属性2 
人员属性N 
 
房间表
字段名说明
编号主键
房间属性1 
房间属性2 
房间属性N 
 
人员房间表
字段名说明
编号主键
人员编号外键
房间编号外键
人员房间属性1 
人员房间属性2 
人员房间属性N 
 
工具表
字段名说明
编号主键
房间编号外键
工具属性1 
工具属性2 
工具属性N 
 
事情表
字段名说明
编号主键
工具编号外键
事情属性1 
事情属性2 
事情属性N 

论坛徽章:
0
7 [报告]
发表于 2007-11-13 18:09 |只看该作者
很感谢你耐心的回答,我这就试试!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP