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

时间:2015-04-02 06:48:27

标签: sql database database-design rdbms

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

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. 如何在数据库图表中描述此关系?

2 个答案:

答案 0 :(得分:1)

是的,这几乎是教科书的方式。

不确定你的意思"如何在图表中描述"。在图表中,您将绘制两个框,每个框一个。然后会有两行连接用户和消息,一行标记为"来自"另一个标有"到"。框的确切形状和线条的外观取决于您正在使用的图表惯例。

答案 1 :(得分:0)

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

用于查询

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