2013-03-25 70 views
1

如何創建一個Message表像這樣在MySQL的數據庫,其中存儲的信息和他們的反應?如何實現mySQL的自我關係?

enter image description here

+1

什麼是錯列'Message.response_to'具有FK爲'Message'的PK? – 2013-03-25 10:21:16

+2

爲什麼你不只是一個字段添加到持有另一消息的主鍵消息表? – Philipp 2013-03-25 10:22:16

回答

5

你可以試試這個:

create table messages (
    message_id int primary key, 
    response_to int null references messages(message_id), -- self relationship 
    user_from int not null references users(user_id), 
    user_to int not null references users(user_id), 
    content varchar(200) not null 
); 

第一條消息將有null值未response_to場。請注意,如果您打算存儲「對話」而不是「消息」,請考慮使用CLOB(字符大對象)的普通表來存儲對話的JSON或XML表示形式。它會加快你的查詢速度(如果你總是打算一次讀取整個對話而不是單個消息)。

+0

謝謝巴勃羅,我明白了這是如何運作的!如果沒有響應,則在這種情況下空值很重要。 – Ciphor 2013-03-25 10:25:45

1

您可以創建一個foreign_key它引用原郵件ID,但不要忘記允許空值,因爲原始郵件將不會有這個按鍵。

但是不是更好的方法有一個線程表,然後在消息表中保存threadId以便可以匹配哪些消息屬於哪個線程,發佈時間可能是識別響應的一個很好的指標消息。

+0

感謝增加對空值的點,你的建議是好的,有用的投入! – Ciphor 2013-03-25 10:26:50