类别数量必须大于1但少于5

时间:2014-04-23 17:42:48

标签: database-design relational-database

我想创建一个用于创建学术考试的数据库应用程序。为简单起见,数据库包含以下3个表。

问题:

  • ProblemID(int,identity,primary key)
  • 问题(nvarchar)
  • 解决方案(nvarchar)

分类

  • CategoryID(int,identity,primary key)
  • 类别(nvarchar)

ProblemCategory:

  • CategoryID(int,复合主键)
  • ProblemID(int,复合主键

每个问题至少与一个类别相关联,最多与五个类别相关联。我的问题是如何确保在数据库级别保持此约束?

奖金问题:

以下设计是否可以替代上述设计?

问题:

  • ProblemID(int,identity,primary key)
  • 问题(nvarchar)
  • 解决方案(nvarchar)
  • CategoryID1(int,not null)
  • CategoryID2(int,null)
  • CategoryID3(int,null)
  • CategoryID4(int,null)
  • CategoryID5(int,null)

分类

  • CategoryID(int,identity,primary key)
  • 类别(nvarchar)

1 个答案:

答案 0 :(得分:1)

问题1:每个问题至少与一个类别相关联。

答案:在Problems表上声明一个外键约束。

Problems.ProblemID REFERENCES ProblemCategory.ProblemID

(据推测还有外键限制  在ProblemCategory上声明引用Problems.ProblemID和Categories.CategoryID。)

问题2:每个问题最多与5个类别相关联。

答案:在ProblemCategory表上声明一个约束。         (正如布兰科指出的那样。)

WHERE (SELECT MAX(CatCount)
       FROM (SELECT COUNT(*) AS CatCount
             FROM ProblemCategory
             GROUP BY ProblemID)
      ) <= 5

问题3:每个问题记录最多设计五个Cat ID。

答案:不,这是一个糟糕的主意。 (阅读有关规范化的任何文本。)考虑:

  • 如何查询类别“规范化”的所有问题?
  • 你如何阻止同一个猫在特定问题上重复?
  • 问题是Cat ID3和ID5但ID4 IS NULL是什么意思?