2015-04-02 64 views
0

我得到了一個簡單的消息系統,其中每個消息有一個發送者,並且總是確切的一個接收者從不是發送者。所以我的設計就像是如下:一個簡單的消息系統的表設計

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. 這個關係在數據庫圖中如何描述?
+0

似乎是一種很好的方式。你可以考慮命名你的用戶表的人。 – 2015-04-02 09:36:30

回答

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