如果MySQL中的聊天消息表本身包含TEXT消息,或者我将它放在一个单独的表中?

时间:2017-10-07 19:23:30

标签: mysql

我有一个包含邮件本身的message表。我不确定是否应将这两者区分开来,如果有的话,有什么好处。

CREATE TABLE message (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    from_id INT UNSIGNED NOT NULL,
    to_id INT UNSIGNED NOT NULL,
    thread_id INT UNSIGNED NOT NULL,
    message TEXT NOT NULL,
    is_viewed BOOL NOT NULL
);

我应该像这样进一步规范它吗?

CREATE TABLE user_sent_message (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    message_id INT UNSIGNED NOT NULL,
    from_id INT UNSIGNED NOT NULL,
    to_id INT UNSIGNED NOT NULL,
    thread_id INT UNSIGNED NOT NULL,
    is_viewed BOOL NOT NULL
);

CREATE TABLE message (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    message TEXT NOT NULL
);

这不会使查询更复杂吗?如果有任何好处,这样做有什么好处?据我所知,第一种替代方案的表格大小要小得多,并且在第二种方案中分布在两个表格中。这会影响查询或内存使用时的性能吗?

2 个答案:

答案 0 :(得分:0)

当你有1比1的关系时,你 NOT 以任何方式正常化。唯一有意义的地方是,如果两个或更多不同的表需要访问消息,即便如此,他们也可以简单地使用表的主ID。

坚持使用1张桌子,因为它更容易,更快更好!

答案 1 :(得分:0)

在第一种情况下,您只有一个表有6列,而在第二种情况下,您有1个表6列和一个附加表。我没有看到你从分割桌子中获得的任何东西。我看到这个MySQL: multiple tables or one table with many columns? 拥有一个表可能更好,因为它减少了数据库所需的开销,就像在这种情况下,你已经有两个序列用于表。