我对在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
答案 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关系。