【发布时间】:2011-04-02 04:05:02
【问题描述】:
我有一个包含两个表的数据库:
- 条目
- 标签
条目表包含每个具有一个或多个标签的帖子。问题是,每个帖子都可以有任意数量的标签。换句话说,我不能有一个 'tag1'、'tag2' 等列并进行 LEFT JOIN。
我应该如何设置条目,以便每个帖子可以有任意数量的标签?
【问题讨论】:
标签: sql database database-design tags data-modeling
我有一个包含两个表的数据库:
条目表包含每个具有一个或多个标签的帖子。问题是,每个帖子都可以有任意数量的标签。换句话说,我不能有一个 'tag1'、'tag2' 等列并进行 LEFT JOIN。
我应该如何设置条目,以便每个帖子可以有任意数量的标签?
【问题讨论】:
标签: sql database database-design tags data-modeling
你需要一个映射表。
创建一个名为 entries_tags 的表,其中包含两列:entry_id 和 tag_id,两个条目上都有一个多键。
这称为多对多关系。
【讨论】:
您也可以采用 SO 方式,其中 除了 有一个交汇点/映射/交叉点表之外,您在条目上还有一个可标记的标签列表:
entries table:
post_id: 3539744, .... tags: sql, database, database-design, tags, data-modeling
如果在提取条目的关联标签时,您无法承受使用联结表的性能损失。当然,这里需要格外小心,因为您正在处理非规范化数据。
【讨论】: