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

How to model messages exchanged between users? - ER Diagram

我正在尝试设计一个 ER 图,其中我有一个 USER 和一个 MESSAGE 实体。用户可以向其他用户发送消息。我为此设计了 2 个替代图表,但我不确定哪一个是正确的。

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

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

因此,您有 IDUSERSENDERIDUSERRECEIVERIDMESSAGE。我不知道消息 table 中的内容,但您也可以在名为 TEXT 的关系中添加一个属性,以便在此处插入消息的内容。

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

我会将 sender_id 作为消息的属性,同时为收件人设置多对多 table。形式上,ER 模型不会混合实体与属性之间的关系。我认为第二张图在形式上是正确的,尽管这两个关系的实现方式不同。

都不是。这里我们有一个自我关系的案例。

发送消息被解释为一个事件,而不是一个实体,即使它有 attributes/properties。两个实体之间存在着紧密的联系:用户,也是用户。 ER 图中概念模型的正确情况是:

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

拆解一次,也就是对逻辑模型进行一次分解,最终得到如下情况:

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

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