如何建模用户之间交换的消息? - ER图

时间:2016-02-10 08:40:43

标签: database-design entity-relationship erd entity-relationship-model

我试图设计一个ER图,其中我有一个USER和一个MESSAGE实体。用户可以向其他用户发送消息。我为此设计了两个替代图表,但我不确定哪一个是正确的。 In the first one i use a recursive relationship with roles whereas in the second one, i use 2 different relationships.

3 个答案:

答案 0 :(得分:5)

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

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

pic01

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

一旦你肢解它,也就是说,一旦你对逻辑模型进行分解,你就会得到以下情况:

pic02

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

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

答案 1 :(得分:0)

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

通过这种方式,您可以与两个指向 USER 的外键和一个用于 MESSAGE 的外键具有多对多关系。

因此,您有 IDUSERSENDER IDUSERRECEIVER IDMESSAGE 。我不知道你在消息表中的内容,但你也可以在名为 TEXT 的关系中添加一个属性,以便在这里插入消息的内容。

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

答案 2 :(得分:0)

我会将sender_id作为邮件的属性,同时为收件人提供多对多表。正式地,ER模型不会混合具有属性的实体之间的关系。我认为第二个图正式正确,即使两个关系的实现方式不同。