我有这张桌子:
idFilmAward Name
--------------------------------
1 Academy Awards
2 Saturn Award
.. ...
让我们说我也有这张表:
###############
###First Way###
###############
idAward Name idFilmAward
------------------------------------------
1 Best Director 1
2 Best Director 2
.. .... ..
100 Best Actor 1
让我们在“第一路”中说“最佳导演”只重复了两次,这意味着我不需要使用“第二条道路”:
################
###Second Way###
################
idAward idAwardName idFilmAward
------------------------------------------
1 1 1
2 1 2
.. .... ..
100 2 1
idAwardName Name idAward
-------------------------------------------
1 Best Director 1
2 Best Actor 2
... ... ...
但是让我们说“最佳导演”重复100次,然后我需要使用“第二条道路”,对吗?我的问题是,有多少重复可以使用“第一道路”,经过多少次重复我应该使用“第二道路”?
答案 0 :(得分:2)
严格地说,Database Normalization说你应该总是使用第二种方式。
您应避免在“完美”关系数据库设计中的不同行中重复相同的数据。通过这种方式,如果您想将奖项的名称从“最佳导演”更改为“最佳高级导演”,您应该更新许多行(第一种方式)和一行(第二种方式)。
但是在使用雪花设计的数据仓库设计中,第一种是最好的方式。
答案 1 :(得分:1)
这不是重复多少次的问题。必须对数据库进行标准化(至少是第三范式)。所以“如果它重复甚至一次”或更好“可以重复”在你的情况下使用一个单独的表。 (这不是一个概念)
当您不需要规范化数据库时,其中一个孤立的情况是对大量数据使用性能关键操作时,在这种情况下,非规范化数据库将实现更快(更好)的结果。
答案 2 :(得分:1)
我认为你应该在重复情况发生的任何时候使用第二种方式。因为它看起来像字典 - 它是数据库规范化的第3种常规形式
答案 3 :(得分:1)
我的直觉反应是,这是过早的优化。目前,您可能没有足够使用这个数据库,因为它对您存储数据的方式很重要(它不会对您的服务器产生太大影响等),数据库本身也不会阻止您重复数据库的重复次数。你喜欢。
那就是说,我会有以下内容:
原因是并非所有仪式都有相同的奖项。因为从不同的仪式中分出不同的奖项和名字对我来说是合乎逻辑的。