日期:2014-05-18  浏览次数:20567 次

数据库设计问题
现在我有下面的几个设计上的疑问:
  1.在设计系统中,用户和用户之间的留言[短消息]之类,分收/发件箱,
那么,这个设计怎么做比较合理
  2.在有3个以上表的信息,都对应一个表,比如,3个表都是信息类的,而D表是存放这些信息相关的留言或者评论的,那么,怎么设计会比较合理:
  在D表加一个字段区别还是其他的方法?因为很可能D的外键存在相同值
  3.我的好友系统又怎么设计比较合理,和QQ好友差不多做法,


------解决方案--------------------
1.在设计系统中,用户和用户之间的留言[短消息]之类,分收/发件箱,
那么,这个设计怎么做比较合理
类别表:
Id 名字 类别(1代表系统、2代表自定义)
1 发件箱 1
2 收件箱 1
3 垃圾箱 1
4 自定义1 0
...

留言表:
Id 标题 内容 所属
1 XXXX1 YYYYYYYYY1 1
2 XXXX2 YYYYYYYYY2 2
3 XXXX3 YYYYYYYYY1 4
...


2.在有3个以上表的信息,都对应一个表,比如,3个表都是信息类的,而D表是存放这些信息相关的留言或者评论的,那么,怎么设计会比较合理:
在D表加一个字段区别还是其他的方法?因为很可能D的外键存在相同值

在D表加一个字段区别,不使用外键,而用check或者出发起来约束
check写法:
((区别字段=1 and exists (select 1 from 表1 where id=信息id)) or
(区别字段=2 and exists (select 1 from 表2 where id=信息id)) or
(区别字段=3 and exists (select 1 from 表3 where id=信息id))
)
触发器写法类似
不过这可能不是好方法,效率有影响

3.我的好友系统又怎么设计比较合理,和QQ好友差不多做法,
好像可以参考1的设计,同时解决好友、黑名单、陌生人等

------解决方案--------------------
删除时只做删除标记~~~或在一方已做删除标记的情况下删除记录.