下面两张表是一对一的关系,我不明白为什么要用一对一, 直接放在一张表里不好吗? 这样只操作一张表, 很好维护.
一对一的关系有什么好处?难道是把大字段单独存可以提高查询性能吗?
CREATE TABLE jforum_posts (
post_id INT NOT NULL auto_increment,
topic_id INT NOT NULL default '0',
forum_id INT NOT NULL default '0',
user_id INT NOT NULL default '0',
post_time datetime default NULL,
poster_ip varchar(15) default NULL,
enable_bbcode tinyint(1) NOT NULL default '1',
enable_html tinyint(1) NOT NULL default '1',
enable_smilies tinyint(1) NOT NULL default '1',
enable_sig tinyint(1) NOT NULL default '1',
post_edit_time datetime default NULL,
post_edit_count INT NOT NULL default '0',
status tinyint(1) default '1',
attach TINYINT(1) DEFAULT '0',
need_moderate TINYINT(1) DEFAULT '0',
PRIMARY KEY (post_id),
KEY (user_id),
KEY (topic_id),
KEY (forum_id),
KEY(post_time),
INDEX (need_moderate)
) TYPE=InnoDB;
CREATE TABLE jforum_posts_text (
post_id INT NOT NULL PRIMARY KEY,
post_text TEXT,
post_subject VARCHAR(100)
) TYPE=InnoDB;
这个设计的好处是如果只查询一个用户的文章列表会比较快。
因为用户发的文章内容往往比较大, 但是标题往往会比较短。 如果都放到一个表里, 那么这个表会非常大。 查询大表的是比较耗时的。
而如果单独出来, jforum_posts这个表会比较小,查询起来比较快。
当然这种设计也不是总是好的。如果2个表都非常小,那么放到一张表里避免了一次join, 那么效果要比2个表好。 要具体问题具体分析。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。