为简单消息传递系统设计的表

Tables design for a simple messaging system

我得到了一个简单的消息系统,其中每条消息都有一个发送者,并且总是只有一个接收者,而接收者永远不是发送者。所以我的设计如下:

create table user
{
PersonID int,
Name varchar(255)
}

create table message
{
MessageID int,
FromPersonID int,
ToPersonID int,
Message varchar(160)
}

要获取给定 PersonID 的所有消息,我写:

SELECT MessageID FROM message WHERE PersonID=FromPersonID OR PersonID=ToPersonID

现在我有两个问题:

  1. 这是设计该关系的正确(且快速)方法吗?
  2. 数据库图中如何描述这种关系?

是的,这几乎是教科书式的做法。

不确定 "how is it described in a diagram" 是什么意思。在图表中,您将绘制两个框,每个框对应 table。然后会有两条线连接 User 和 Message,一条标记为 "from",另一条标记为 "to"。方框的确切形状和线条的外观取决于您使用的图表约定。

您可以根据您的查询对其进行规范化。

用于查询

SELECT MessageID FROM message WHERE PersonID=FromPersonID OR PersonID=ToPersonID

您可以创建规范化结构

create table user
{
PersonID int,
Name varchar(255)
}

create table message_meta
{   
FromPersonID int,
ToPersonID int,    
}

create table message_data
{
MessageID int,
Message varchar(160)
}

并触发一个查询,例如

SELECT MessageID FROM message_meta WHERE PersonID=FromPersonID OR PersonID=ToPersonID

这样效率会更高。 TC