在SQLite中创建N:M关系

时间:2014-10-24 12:46:24

标签: mysql database sqlite relationship

我对在SQLite中两个表之间建立N:M关系感到困惑。

我的表格是“帖子”和“标签”,这是我为我的博客制作的CMS的两个组成部分。

我想将posts表的tags列链接到tags表,以便我可以使用数据库中的一行将多个标签(在tags表中使用id,name和description定义)链接到post posts表的tags列。

我已经尝试过各种各样的东西,因为被告知要使用N:M关系,这是我在初学SQL之前没用过的东西。我理解需要做什么 - 将“tags”列指向tags表 - 但我不知道如何执行它。

我根据这些链接尝试了外键,索引等,但我不确定我应该做什么......虽然我承认答案几乎肯定在我的鼻子下面。

http://www.singingeels.com/Articles/Understanding_SQL_Many_to_Many_Relationships.aspx

SQLite many-to-many relationship?

它只是在posts表中的FOREIGN KEY(tags)REFERENCES标签(id)吗?虽然我没有看到这如何为posts表中的“标签”启用多个条目。

任何建议都表示赞赏,我现在正继续尝试教育自己,

Ilmiont

2 个答案:

答案 0 :(得分:1)

在多对多关系的情况下,您必须创建一个额外的表,除了帖子和标签(例如posts_tags),其中存储帖子和标签之间的关系。此表应包含post_id(对posts.id的外键引用)和tag_id(对tags.id的外键引用)列。例如,如果id = 1的帖子包含ID为1,2,3的标签,则您将有3行,如

 post_id | tag_id
     1   |   1
     1   |   2
     1   |   3

对于反向关系。如果您的文章标记为ID为3,4,5,标记为id = 5的标记,那么您的表格将为

 post_id | tag_id
     3   |   5
     4   |   5
     5   |   5

希望有所帮助

答案 1 :(得分:1)

这通常称为多对多关系,您可以更好地搜索该短语的更多示例。

更快的是你需要第三个表,其中包含对帖子和标签的外键,就像你链接的另一个SO问题一样。最后注意那里的foobar表。在您的情况下,您需要一个post_tags表。那个表可以有一个帖子(N)的多行,并且该表中的一个帖子可以有多个具有不同标签(M)的行,从而获得你的N:M关系。