我有一个简单的消息系统,每个消息都有一个发送者,并且总是只有一个接收者,它永远不是发送者。所以我的设计如下:
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
现在我有两个问题:
答案 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