如何规范(数据库)用户,报价和标签之间的关系?

时间:2015-07-04 13:43:18

标签: sql-server database-design normalization

我正在开发一个显示引号的应用,就像Android中的BrilliantQuotes一样。我正在研究表格设计,我无法想出一个关于表格User / Quotes和Tags应如何相关/设计/规范化的解决方案。 关系类似于:

  1. 用户可以拥有0个或多个标签。
  2. 标签可以有0个或多个引号,引号可以有0个或多个标签。
  3. 第一部分相当简单,我将在Tags表上有一个外键列来标识User。对于第二部分,我如何表示这种关系?我不能只将Quotes FK添加到Tags表中,反之亦然,因为它不会被标准化,不是吗?此外,由于我将允许用户创建自己的标签,我可以有许多行具有相同的TagName,例如“有趣”,我认为这是必要的,因为标签是用户特定的或者是否有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

您正在寻找的是交叉表

定义非常稀疏,类似

CREATE TABLE dbo.Users ( id int identity, username varchar(99))
CREATE TABLE dbo.Tags  ( TagID INT Identity, taglabel varchar(99), ownerid INT)
CREATE TABLE dbo.Quotes ( QuoteID INT Identity, quoteText varchar(max))

然后

 CREATE TABLE QuoteTagMap (QTID INT identity, QuoteID INT, TagID int)

您可以向QuoteTagMap添加行以存储标记和引号之间的关系。如果您希望允许不同的用户为同一引号使用不同的标签...那么地图也将具有OwnerID