数据库设计 - 创建查找表的最小空间量

时间:2016-06-02 08:33:58

标签: database database-design

这里有一个小小的数据库设计问题 - 我希望得到关于正确方法的意见和讨论,因为实际问题是我不止一次打过的。

所以我发明了一款新游戏。在这个游戏中,你可以获得10分,20分,30分,40分,50分的罚分。取决于罚分,取决于有多少裁判需要同意。因此,如果你获得10分的罚分,那么只有1名裁判员“史蒂夫”。需要同意的是,如果有20名,2名裁判和史蒂夫·史蒂夫和'阿兰'会同意的。

如何将其安排在数据库表中,以便查找哪些推荐人以及需要同意的人数?

非理想的解决方案: 我想过有标题

penScore | Ref1 | Ref2 | Ref3 | Ref4 | Ref5
  10      steve
  20      steve   alan
  30      steve   alan   scott

这个问题是它留下了很多空单元格,这很麻烦。

你能想出更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

空单元格不占用大量空间。这取决于您使用的是哪种数据库产品,但大多数产品都有一种非常简洁的方式来表达“此处没有”。表示“此处没有”的常用方法是SQL NULL。

当您开始对包含SQL NULL的单元格执行布尔逻辑时,真正的混乱就开始了。当您进入NULLS的逻辑操作时,您将进入SQL的三值逻辑。与普通的两值逻辑相比,这是非常模糊的东西。

您概述的解决方案未规范化。这可能会也可能不会导致问题,具体取决于您要对数据执行的操作。

没有一种最佳做法。这取决于具体情况。

答案 1 :(得分:0)

直截了当的设计是:

--player PLAYER gets penalty score SCORE from referee REFEREE
Penalty(player, score, referee)
UNIQUE NOT NULL (player, score, referee)
CHECK (score in (10, 20, 30, 40, 50))