It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center




7年前关闭。





我想实施一个通知系统。我有用户,每个用户都有通知设置

结构1:

 Users                Notification_settings                Notifications
 -id (pk)             -id                                   -id (pk)
 -username            -user_id (fk) references Users        -user_id (fk)
 -password            -receive_email (boolean)              -message
                                                            -is_read


结构2:

 Users                                               Notifications_settings
 -id (pk)                                             -id (pk)
 -setting_id (fk) references Notifications_settings   -receive_email
 -username
 -password

 Notifications
 -id (pk)
 -user_id (fk)
 -message
 -is_read


选择哪种数据库结构或用于通知系统的任何其他数据库结构?

最佳答案

现在是Joe Celko quote


一个强大的实体是凭自己的优点而存在的实体。弱实体是由于强实体而存在的实体。典型的例子是销售订单。订单抬头很大,而订单明细却很弱。如果取消了订单,则所有订单详细信息都应消失。


那么,用户是否可以在没有通知的情况下独自存在?然后,通知表应具有用户的外键。反过来是真的吗?然后以其他方式进行。这些都不是真的吗?然后,也许您的模型不正确,并且它们之间应该有一个junction table(即使有唯一的约束),或者它们确实确实属于同一张表。我不特别喜欢将它们放在同一张表中的最后一种选择,因为您已经自然地提出了两个名词来描述不同的实体。

用户以外的其他实体可以“收到”通知吗?也许这种想法可以帮助您对该领域进行建模。

更新-一些其他想法:

如果将所有这些列都放在一个表中,那么现在哪一个(如果有的话)看起来将包含冗余数据?假设现在只有几个不同的消息。也许您不需要Notifications表,而是Messages表以及该表与Users之间的连接表,该表可以存储随时间推移发送给Users的消息(包括是否已读取)。此时,receive_email可能是User的更好属性,尽管仅将Message映射到User就足以表明该User应该接收电子邮件。这些只是我可能正在考虑的事情,希望可以导致对应用程序的更好理解。

另外,请注意,bit / boolean数据类型不是ANSI SQL,通常可以从其他数据派生,甚至可以转变为映射到多种状态的整数。

10-06 06:43
查看更多