请教一个数据库设计问题

hssg44 2011-05-13 01:19:56
现在有这么一个需求,软件要实现个人心情,像QQ心情一样,但是用户可以设定比较多的规则。
规则的优先级如下:
1.纪念日(eg:2011-5-15 今天是我生日,祝自己生日快乐。)
2.时间段(eg:12:00-14:00 午休的感觉真好。)
3.特别的人(eg:用户编号1 I love you forever)
4.群组(eg:群组编号1 天天有个好心情)
5.默认(eg:健康生活每一天)

显示规则是按1-5优先度显示,1是最高级优先,一个规则生效后其它规则无效。

我自己的设计方案:
心情表(心情ID,心情内容,添加时间,用户ID,是否默认)
用户表(用户ID,用户名)
群组表(群组ID,群组名)
群组用户表(群组ID,用户ID)
心情群组表(群组ID,心情ID)
纪念日表(纪念日ID,纪念日,心情ID)
时间段表(时间ID,开始时间,结束时间,心情ID)
特别的人表(特别ID,特别用户ID,心情ID)

我自己感觉我这样子设计好像表太多了,要查询出用户的当前心情需要做很多判断,程序执行起来可能效率会低?
我想问:我这样子设计方案有没有什么不足,另外,能不能把这些集中在一起好判断点,例如写个视图什么的。
...全文
256 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hssg44 2011-05-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tangren 的回复:]
实体(表)之间的关系怎样,一对一(1:1),一对多(1:n),多对多(m:n)
[/Quote]
是我没注意,没说清楚。

用户表 1:n 心情表 一个用户可以发表多个心情,但一个心情只属于一个用户

用户表 m:n 群组表 一个用户可以属于多个群组,一个群组包含多个用户
心情表 1:1 群组表 一个群组只能设定一个心情
用户表 1:n 纪念日表 一个用户可以设定多个纪念日,但设定的多个纪念日不能是同一天
心情表 1:1 纪念日表 一个纪念日只能设定一个心情
用户表 1:n 时间段表 一个用户可以设定多个时间段,但设定的多个时间段不能有重复
心情表 1:1 时间段表 一个时间段只能设定一个心情
用户表 1:n 特别的人 一个用户可以关注多个特别的人
心情表 1:1 特别的人 用户对关注特别的人只能设定一个心情
hssg44 2011-05-14
  • 打赏
  • 举报
回复
另外,我感觉自己的设计上,似乎不是很符合范式规范,总感觉以后做出来会出现问题。
hssg44 2011-05-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bobo12082119 的回复:]
用户表(用户id --primary key
,用户名
,用户群组编号 --用户所属的群组,连接用户群组表
,心情id
,是否特别人 --特别的人也是人,没必要有数据冗余
)
[/Quote]
感谢你的回复,日期表的设计挺好的。可能是我上面没表述清楚。用户群组的话跟我们QQ群组类似,一个用户可以属于多个群组,是用户自己对自己的好友进行设定的,并且用户可以添加删除群组。

另外用户是可以设定多个心情的,只不过是因为心情用的地方不一样,例如:
设定纪念日2011.5.14的心情是“我的生日我开心”,
设定时间段12:00-14:00 心情“又是一天午休时”
设定对“大学同学”群组心情“怀念大学时光,什么时候开聚会啊?”
设定对“李XX”特别的人的心情“在思念你的每一天里渡过”
平常有个默认心情“健康生活每一天”,

按照优先级规则:如果今天是2011.5.14,则对所有用户显示的心情都是“我的生日我开心”,
如果今天是2011.5.15,则在12:00-14:00内这个时间段显示的心情都是“又是一天午休时”,
在这个时间段外,对属于“大学同学”群组用户显示的是“怀念大学时光,什么时候开聚会啊?”,
对“李XX”显示的心情是“在思念你的每一天里渡过”,
对不属于“大学同学”和“李XX”的其他用户显示的默认心情“健康生活每一天”。

按照我自己设计的表,表太多,按这个规则去查询实现,虽然也能实现但是要做很多次的查询,我怕到时候如果用户多的话,查询起来可能速度太慢,因此想问问有没有更好的数据设计,或者有一些更好的查询方案。
304的的哥 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 hssg44 的回复:]
现在有这么一个需求,软件要实现个人心情,像QQ心情一样,但是用户可以设定比较多的规则。
规则的优先级如下:
1.纪念日(eg:2011-5-15 今天是我生日,祝自己生日快乐。)
2.时间段(eg:12:00-14:00 午休的感觉真好。)
3.特别的人(eg:用户编号1 I love you forever)
4.群组(eg:群组编号1 天天有个好心情)
5.默认(eg:健康生活每……
[/Quote]

--参考:
心情表(心情ID --primary key
,心情群组号
,心情内容
,添加时间
,是否默认)
--心情表不应该有用户id,相反,用户表里面必须有心情id
心情群组(心情群组编号 --primary key
,心情群组名称)
用户表(用户id --primary key
,用户名
,用户群组编号 --用户所属的群组,连接用户群组表
,心情id
,是否特别人 --特别的人也是人,没必要有数据冗余
)
用户群组(用户群组编号 --primary key
,用户群组名称)
日期表(日期id --主键
,心情id --外键
,用户id --外键
--上面是三个联合主键
,开始日期
,结束日期
,是否特别日期 --比如特别日期
)
--
一个user可以有多个mood(1:n)
一个user有多个特别日期(1:n)
不同的日期可以发不同的mood(m:n)
日期表连接用户表和心情表(user ->date_table <- mood),当然可以不是日期表,按照你的想法取名
一个mood group对应多个mood(1:n)
一个user对应多个user group(1:n)
tangren 2011-05-13
  • 打赏
  • 举报
回复
实体(表)之间的关系怎样,一对一(1:1),一对多(1:n),多对多(m:n)
秋雨飘落 2011-05-13
  • 打赏
  • 举报
回复
编码--名称就是字典表
hssg44 2011-05-13
  • 打赏
  • 举报
回复
up一下下,希望有人解惑
hssg44 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liuyyuns 的回复:]
你可以考虑把个人心情做成数据字典灵活配置就可以了。
不需要这么多的表了。
[/Quote]
数据字典?这个我从来没接触过,能不能具体说说?
liuyyuns 2011-05-13
  • 打赏
  • 举报
回复
你可以考虑把个人心情做成数据字典灵活配置就可以了。
不需要这么多的表了。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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