【发布时间】:2012-02-15 19:36:06
【问题描述】:
我有一张桌子Users (UserID, FirstName, LastName...) 和一张桌子Messages。表Messages 存储用户之间发送的消息。
所以,我可以像这样创建这个表:
Messages (SenderID, ReceiverID...) 并为Users 创建 2 个 FK,但这种方法似乎不正确,并且不允许对 FK 进行级联删除/更新。
不允许多条消息。 此外,我不能为这两种关系设置“设置为空”。为什么?会很好的。
在这种情况下哪种结构是正确的?
【问题讨论】:
-
级联删除!不在我的手表上...!
-
我更喜欢让应用程序发出显式删除。不喜欢相关记录“消失”
-
因为
ON DELETE CASCADE的意思是,如果用户#17 向用户#18 发送了一条消息,并且稍后您删除了用户#18,那么该消息将从用户#17 的发件箱中消失。跨度> -
是的,我理解,这取决于业务规则。无论如何,这个有 2 个表的架构是正确的?
-
正确性取决于您的业务需求。例如,您的系统中是否有可能将一条消息发送给多个接收者 - 就像在电子邮件中一样?如果是这样,那么这种结构将不起作用。这种结构非常严格,但在获取消息时会很快。所以需要找到类似问题的答案。如果您发布确切的要求,则可以设计出更好的解决方案。
标签: sql-server database architecture