【问题标题】:How to solve this solution with DB如何用 DB 解决这个问题
【发布时间】: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


【解决方案1】:

你必须从用户的角度来看问题。

当发件人从发件箱中删除邮件时,您认为收件人希望删除邮件吗?

没有。换句话说:为每个用户创建一个消息副本。

不允许多条消息

疯狂的要求。这是两条不同的消息。

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 2020-04-27
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多