【问题标题】:How to implement mySQL self-relationship?如何实现mySQL的自关系?
【发布时间】:2013-03-14 19:10:39
【问题描述】:

如何在存储消息及其响应的 mySQL 中创建像这样的Message 表?

【问题讨论】:

  • Message 的PK 具有FK 的列Message.response_to 有什么问题?
  • 为什么不直接在 Message 表中添加一个字段来保存另一条消息的主键?

标签: mysql sql self database-relations


【解决方案1】:

你可以试试这个:

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 值 un response_to 字段。

附带说明,如果您打算存储“对话”而不是“消息”,请考虑使用带有 CLOB(字符大对象)的普通表来存储对话的 JSON 或 XML 表示。它将加快您的查询速度(如果您总是计划一次阅读整个对话而不是单个消息)。

【讨论】:

  • 感谢 Pablo,我现在知道它是如何工作的了!如果没有响应,则 null 在这种情况下很重要。
【解决方案2】:

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

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

【讨论】:

  • 感谢您补充关于 null 值的观点,您的建议很好,很有用!
猜你喜欢
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多