这里有一个小小的数据库设计问题 - 我希望得到关于正确方法的意见和讨论,因为实际问题是我不止一次打过的。
所以我发明了一款新游戏。在这个游戏中,你可以获得10分,20分,30分,40分,50分的罚分。取决于罚分,取决于有多少裁判需要同意。因此,如果你获得10分的罚分,那么只有1名裁判员“史蒂夫”。需要同意的是,如果有20名,2名裁判和史蒂夫·史蒂夫和'阿兰'会同意的。
如何将其安排在数据库表中,以便查找哪些推荐人以及需要同意的人数?
非理想的解决方案: 我想过有标题
penScore | Ref1 | Ref2 | Ref3 | Ref4 | Ref5
10 steve
20 steve alan
30 steve alan scott
这个问题是它留下了很多空单元格,这很麻烦。
你能想出更好的解决方案吗?
答案 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))