我必须在数据库中存储一组相关的关键字。截至目前,我正在考虑使用以下内容:
存储关键字本身:
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)
);
这是惯例还是有更好的方法?我看到的唯一问题是我需要检查两个列,以便有时能够获得相关的关键字...我可能会在这里遗漏一些东西。
答案 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)
)