SQL Server数据库中的标记

时间:2016-02-15 21:30:26

标签: sql-server database-design

我正在创建一个基于问题构思的网站(如StackOverflow)。

想象一下,类似的问题具有相同的标签,标签可以属于一个或多个问题。

我正在使用SQL Server数据库。

在数据库中创建表来注册这些标签是正确的想法,还是有不同的方法/概念我不知道这样做?

1 个答案:

答案 0 :(得分:1)

如果您没有处理大量(我认为超过数千万)的问题和标签,您可以选择这样的设计:

问题

QuestionId INT NOT NULL CONSTRAINT PK_Question PRIMARY KEY, -- auto generated with IDENTITY or SEQUENCE
QText NVARCHAR(MAX) NOT NULL

标签

TagId INT NOT NULL CONSTRAINT PK_Tag PRIMARY KEY, -- auto generated 
TagName NVARCHAR(128)

QuestionXTag

QuestionXTagId INT NOT NULL CONSTRAINT PK_QuestionXTag PRIMARY KEY, -- auto generated 
QuestionId INT NOT NULL CONSTRAINT FK_QuestionXTag_Question FOREIGN KEY REFERENCES Question,
TagId INT NOT NULL CONSTRAINT FK_QuestionXTag_Tag FOREIGN KEY REFERENCES Tag,
CONSTRAINT UQ_QuestionXTag_QT UNIQUE (QuestionId, TagId)

n:nQuestions之间存在Tags关联。

所以,简短的回答是是的,它可以在SQL Server中完成。

我的建议是尝试将数据存储在关系数据库中,除非有严重的理由不(非常大的数据,非同类数据等),因为这种方式提供了有意义的结构和低级约束。 / p>