首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类别数目必须大于一,但少于五。

类别数目必须大于一,但少于五。
EN

Stack Overflow用户
提问于 2014-04-23 17:42:48
回答 1查看 44关注 0票数 1

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

问题:

  • ProblemID (int,identity,主键)
  • 问题(nvarchar)
  • 解(nvarchar)

类别:

  • CategoryID (int,identity,主键)
  • 类别(nvarchar)

ProblemCategory:

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

每个问题至少有一个类别,最多5个类别。我的问题是如何确保此约束在数据库级别保持不变?

奖金问题:

下面的设计是否推荐作为上述设计的替代品?

问题:

  • ProblemID (int,identity,主键)
  • 问题(nvarchar)
  • 解(nvarchar)
  • CategoryID1 (int,不是null)
  • CategoryID2 (int,null)
  • CategoryID3 (int,null)
  • CategoryID4 (int,null)
  • CategoryID5 (int,null)

类别:

  • CategoryID (int,identity,主键)
  • 类别(nvarchar)
EN

回答 1

Stack Overflow用户

发布于 2014-04-24 08:16:50

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

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

代码语言:javascript
复制
Problems.ProblemID REFERENCES ProblemCategory.ProblemID

(大概还有在ProblemCategory上声明的引用Problems.ProblemID和Categories.CategoryID的外键约束。)

问题2:每个问题最多涉及5个类别。

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

代码语言:javascript
复制
WHERE (SELECT MAX(CatCount)
       FROM (SELECT COUNT(*) AS CatCount
             FROM ProblemCategory
             GROUP BY ProblemID)
      ) <= 5

问题3:设计时每个问题记录最多有五个猫的ID。

答:不,那是个糟糕的主意。(阅读任何关于正常化的文章。)考虑:

  • 如何查询“规范化”类别的所有问题?
  • 你如何防止同一只猫在给定的问题上重复出现?
  • 如果有猫、ID3和ID5而ID4是空的,这意味着什么呢?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23251572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档