我有一个包含邮件本身的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
);
这不会使查询更复杂吗?如果有任何好处,这样做有什么好处?据我所知,第一种替代方案的表格大小要小得多,并且在第二种方案中分布在两个表格中。这会影响查询或内存使用时的性能吗?
答案 0 :(得分:0)
当你有1比1的关系时,你 NOT 以任何方式正常化。唯一有意义的地方是,如果两个或更多不同的表需要访问消息,即便如此,他们也可以简单地使用表的主ID。
坚持使用1张桌子,因为它更容易,更快更好!
答案 1 :(得分:0)
在第一种情况下,您只有一个表有6列,而在第二种情况下,您有1个表6列和一个附加表。我没有看到你从分割桌子中获得的任何东西。我看到这个MySQL: multiple tables or one table with many columns? 拥有一个表可能更好,因为它减少了数据库所需的开销,就像在这种情况下,你已经有两个序列用于表。