我正在尝试设计一个 ER 图,其中我有一个 USER 和一个 MESSAGE 实体。用户可以向其他用户发送消息。我为此设计了 2 个替代图表,但我不确定哪一个是正确的。
3 回答
两者都不。这里我们有一个自我关系的例子。
发送消息被解释为一个事件,而不是一个实体,即使它具有属性/属性。这里有两个实体之间的密切联系:用户和用户。ER图中的概念模型的正确情况是:
注意这里的基数。用户可能已经或可能没有向其他人发送消息。同样,用户可能会或可能不会收到来自其他用户的消息。
一旦你肢解它,即一旦你对逻辑模型进行分解,你最终会得到以下情况:
这里的“To”和“From”代表一个外键。这种类型的模型会在数据库中生成两个表。一个代表系统的用户。另一个将代表用户之间交换的消息。这里的外键可能会也可能不会作为复合主键。在我看来,我更喜欢使用代理键,但这取决于你。
希望我在某种程度上有所帮助。如果您还有其他问题,请发表评论,我将编辑我的答案,或者我也可以添加评论。
我认为您可以使用第二个,但只能使用一个多对多关系。
这样,您可以与两个指向USER和一个指向MESSAGE的外键建立多对多关系。
所以,你有IDUSERSENDER、IDUSERRECEIVER和IDMESSAGE。我没有你在消息表中的内容,但你也可以在关系中添加一个名为TEXT的属性,以便在此处插入消息的内容。
你怎么看?这个想法是否符合您的需求?
我会将 sender_id 作为消息的属性,同时为收件人提供多对多表。正式地,ER 模型不会将实体之间的关系与属性混合在一起。我认为第二张图形式上是正确的,即使这两种关系的实现方式不同。