如何实现mySQL自我关系?

时间:2013-03-25 10:19:23

标签: mysql sql self database-relations

如何在mySQL中创建一个Message表来存储消息及其响应?

enter image description here

2 个答案:

答案 0 :(得分:6)

你可以试试这个:

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表示。它会加快您的查询速度(如果您总是计划一次阅读整个会话而不是单个消息)。

答案 1 :(得分:1)

您可以创建一个引用原始messageId的foreign_key,但不要忘记允许空值,因为原始消息不会设置此密钥。

但这不是一个更好的方法来拥有一个线程表,然后在messages表中保存threadId以便你可以匹配哪些消息属于哪个线程,发布时间可以是识别响应消息的一个很好的指标