6

我正在尝试设计一个 ER 图,其中我有一个 USER 和一个 MESSAGE 实体。用户可以向其他用户发送消息。我为此设计了 2 个替代图表,但我不确定哪一个是正确的。在第一个中,我使用与角色的递归关系,而在第二个中,我使用两种不同的关系。

4

3 回答 3

8

两者都不。这里我们有一个自我关系的例子。

发送消息被解释为一个事件,而不是一个实体,即使它具有属性/属性。这里有两个实体之间的密切联系:用户和用户。ER图中的概念模型的正确情况是:

pic01

注意这里的基数。用户可能已经或可能没有向其他人发送消息。同样,用户可能会或可能不会收到来自其他用户的消息。

一旦你肢解它,即一旦你对逻辑模型进行分解,你最终会得到以下情况:

pic02

这里的“To”和“From”代表一个外键。这种类型的模型会在数据库中生成两个表。一个代表系统的用户。另一个将代表用户之间交换的消息。这里的外键可能会也可能不会作为复合主键。在我看来,我更喜欢使用代理键,但这取决于你。

希望我在某种程度上有所帮助。如果您还有其他问题,请发表评论,我将编辑我的答案,或者我也可以添加评论。

于 2016-02-25T01:41:08.483 回答
0

我认为您可以使用第二个,但只能使用一个多对多关系。

这样,您可以与两个指向USER和一个指向MESSAGE的外键建立多对多关系。

所以,你有IDUSERSENDERIDUSERRECEIVERIDMESSAGE。我没有你在消息表中的内容,但你也可以在关系中添加一个名为TEXT的属性,以便在此处插入消息的内容。

你怎么看?这个想法是否符合您的需求?

于 2016-02-10T08:49:03.177 回答
0

我会将 sender_id 作为消息的属性,同时为收件人提供多对多表。正式地,ER 模型不会将实体之间的关系与属性混合在一起。我认为第二张图形式上是正确的,即使这两种关系的实现方式不同。

于 2016-02-10T13:07:34.100 回答