为简单消息传递系统设计的表
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
现在我有两个问题:
- 这是设计该关系的正确(且快速)方法吗?
- 数据库图中如何描述这种关系?
是的,这几乎是教科书式的做法。
不确定 "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
我得到了一个简单的消息系统,其中每条消息都有一个发送者,并且总是只有一个接收者,而接收者永远不是发送者。所以我的设计如下:
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
现在我有两个问题:
- 这是设计该关系的正确(且快速)方法吗?
- 数据库图中如何描述这种关系?
是的,这几乎是教科书式的做法。
不确定 "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