在DB模式中使用三列标记同义词

时间:2012-02-18 12:23:36

标签: sql data-modeling database-schema tagging datamodel

假设您拥有与here所述相同的数据模型。

Table: Item
Columns: ItemID, Title, Content

Table: Tag
Columns: TagID, Title

Table: ItemTag
Columns: ItemID, TagID

如果您希望标签同义词与stackoverflow上的标签同义词类似,那么您会将此信息放在数据模型中?您是否只使用逗号分隔的同义词列表添加一个属性,还是稍微转换一个数据模型?

插入新项目的SQL语句如何显示?新项目是与所有同义词连接还是仅与一个主要标签相关联,在代码中我们必须检测到这是同义词?

您建议采用哪种方法来平滑插入删除按标记搜索操作?

1 个答案:

答案 0 :(得分:1)

更改Tag表并添加TagSynonym表:

Table: Tag
Columns: TagID

Table: TagSynonym
Columns: TagID, Title

TagSynonym.TagID将是Tag(TagID)的FK,而Title将是PK。


如果您还想拥有“MainSynonym”标签,那么您可以使用:

Table: Tag
Columns: TagID

Table: TagSynonym
Columns: TagID, Title

Table: TagMainSynonym
Columns: TagID, Title

TagMainSynonym(TagID)为PK,TagMainSynonym(TagID, Title)TagSynonym(TagID, Title)的FK。

它可能看起来过期,但合并两个标签之类的简单操作只需要UPDATE上的简单Tag.TagID(一行),其余的(级联效果将在3个表中)< / p>