我有一个问题网络应用程序,允许用户询问有关具体事项的问题。我正在为每个问题开发一个标签样式标签,就像堆栈溢出一样。当我将每个帖子与类别或标签相关联时,我想知道存储它的最佳方式是什么。以下是我认为这样做的理想方法:
- 在sql数据库中创建一个列来存储序列化的json对象,或者只是一个逗号分隔的行,其中包含问题所属类别的ID。
我觉得使用这种方法很难根据特定标签搜索问题,因为它必须解析每个问题的类别列,这似乎不太理想。构建此功能以适应搜索的好方法是什么,同时保持模式非常简单(请记住,我的主要目标是使标记尽可能与stackoverflow类似)?
答案 0 :(得分:7)
嗯,为了保持简单,为什么不遵循三个表的规范化方法:
有问题(QId,姓名)
标签(tagId,名称)
每个主题标签(QId,tagId)
非常简单....
答案 1 :(得分:1)
最好的方法是使用外键。
有一个表存储带有唯一ID的问题/项目。 (item_ID,info1,info2,info3 ......)
有另一个表存储所有可能的标签及其唯一ID。 (tag_ID,tag_name)
最后一张桌子将两者连在一起。 (ITEM_ID,TAG_ID)
答案 2 :(得分:1)
只是一个简单的many-to-many关系?
例如:
table: [questions]
[TableId][name]
'1' - 'general'
table: [Tags]
[TagId][name]
'99' - 'c#'
table: [QuestionsTagged]
[TableId][TagId]
'1' - '99'
然后将它们与foreign key constraints
链接在一起答案 3 :(得分:0)
每个帖子在某个表格中都有一个ID,包含您计划包含的内容。我们称之为'发布'。
每个帖子标记都在另一个包含post_id和标记的表格中(以及您可能喜欢的任何审核列)' post_tags'。
作为管理员,您可以(可选)将记录添加到“标记”中。查找表格中的标签很受欢迎,您可以很好地定义它们,la https://stackoverflow.com/tags/asp.net/info。