有关db模式存储相关关键字的建议吗?

时间:2009-11-23 00:03:18

标签: mysql database-design keyword

我必须在数据库中存储一组相关的关键字。截至目前,我正在考虑使用以下内容:

存储关键字本身:

CREATE TABLE keywords(
   id int(11) AUTO_INCREMENT PRIMARY KEY,
   word VARCHAR(255)
);

存储关系(存储相关关键字的ID):

CREATE TABLE relatedkeywords(
   id int(11) AUTO_INCREMENT PRIMARY KEY,
   keyword1 int(11),
   keyword2 int(11),
   FOREIGN KEY (keyword1) REFERENCES keywords(id),
   FOREIGN KEY (keyword2) REFERENCES keywords(id)
);

这是惯例还是有更好的方法?我看到的唯一问题是我需要检查两个列,以便有时能够获得相关的关键字...我可能会在这里遗漏一些东西。

3 个答案:

答案 0 :(得分:3)

如果“relatedness”是一对关键字的属性,则此架构可以(不要忘记添加UNIQUE(keyword1,keyword2))

如果“相关性”可以传播一组关键字,并且一组相关关键字可能具有其他属性,则可能需要在关键字和集合之间添加新表“Related_Set”和M:N关系“Keyword_Set”。 / p>

如果一个集合没有任何其他属性,您可能只使用“Keyword_Set”表

答案 1 :(得分:2)

将第二个表简化为:

CREATE TABLE relatedkeywords(
   keyword1 int(11),
   keyword2 int(11),
   FOREIGN KEY (keyword1) REFERENCES keywords(id),
   FOREIGN KEY (keyword2) REFERENCES keywords(id),
   PRIMARY KEY (keyword1, keyword2)
)

因为这是“人工主键”没有多大意义并且没有实际用处的情况之一。

答案 2 :(得分:1)

是否只有一个表的解决方案 -

create table keywords (
   keywrd varchar (40) not null primary key,
   related_keys_csv varchar(400)  
)