效率:表之间的联系

时间:2016-08-31 11:42:29

标签: mysql

我使用这个简化的MYSQL代码:

CREATE TABLE element (
 id int(11) NOT NULL auto_increment,
 text varchar(100) NOT NULL,
 PRIMARY KEY (id)
);

CREATE TABLE tag (
 id int(11) NOT NULL auto_increment,
 text varchar(100) NOT NULL,
 PRIMARY KEY (id)
);

我想将两个数据库与另一个数据库链接起来:

选项1

CREATE TABLE assoc_element_tags (
 elem_id int(11) NOT NULL,
 tag_id int(11) NOT NULL
);

我想知道这样做有什么缺点,为了更容易“文本”访问: 这里“elem_text”等于id为elem_id的元素中的“text”。 (将在INSERT期间添加)

选项2

CREATE TABLE assoc_element_tags (
 elem_id int(11) NOT NULL,
 tag_id int(11) NOT NULL,
 elem_text varchar(100) NOT NULL,
 tag_text varchar(100) NOT NULL
);

如果我需要“文字”,最好是assoc_element_tags中的elem_id请求以及element中的另一个文字请求。

直截了当:

选项3

CREATE TABLE assoc_element_tags (
 elem_text varchar(100) NOT NULL,
 tag_text varchar(100) NOT NULL
);

1 个答案:

答案 0 :(得分:2)

  

如果我需要“文本”,最好是在assoc_element_tags中请求elem_id并在元素中另外请求文本

您误解了SQL的工作原理。您只需运行查询,该查询使用JOIN来查找表中的值。

规范化结构有哪些优点?以下是一些:

  • 您可以声明正确的外键关系,因此您的标记值受数据库保护。
  • 您可以拥有没有推介的标签。例如,如果删除了用户,则不会自动丢失标记。
  • 您有一个简单的标签列表,可以向用户推荐。
  • 如果您的代码超过几个字符,那么您的数据库大小可能会更小。

此外,SQL中的JOIN非常有效,特别是在使用索引时。我建议你坚持使用你的第一个三表解决方案,并学习如何正确查询数据库。