假设您拥有与here所述相同的数据模型。
Table: Item
Columns: ItemID, Title, Content
Table: Tag
Columns: TagID, Title
Table: ItemTag
Columns: ItemID, TagID
如果您希望标签同义词与stackoverflow
上的标签同义词类似,那么您会将此信息放在数据模型中?您是否只使用逗号分隔的同义词列表添加一个属性,还是稍微转换一个数据模型?
插入新项目的SQL
语句如何显示?新项目是与所有同义词连接还是仅与一个主要标签相关联,在代码中我们必须检测到这是同义词?
您建议采用哪种方法来平滑插入,删除和按标记搜索操作?
答案 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>