【问题标题】:Is the design on 3rd normal form?是第三范式上的设计吗?
【发布时间】:2011-08-24 11:57:06
【问题描述】:

我有一个具有属性类别的表。例如,我保存具有 Genre 属性的歌曲的表格:

Songs(
ID (INT), 
Name (STRING), 
Genre: (STRING)
)

表格是第三范式吗?

我的意思是我知道最好将Genre保存在另一个表中,并且表之间的关系如下:

Songs(
ID (INT), 
Name (STRING), 
Genre_ID: (INT)
)

Genre(
ID (INT),
Name (String)
)

Songs.Genre_ID = Genre.ID.

但我无法确定第一种情况(有一个表)是否违反了第三范式的任何规则!

是吗?如果有,是哪一个?

谢谢, 迈克

【问题讨论】:

    标签: database-design normalization third-normal-form


    【解决方案1】:

    跟着我重复。

    “ID号与规范化无关。ID号与规范化无关。ID号与规范化无关。”

    如果您的目标是为每个歌曲名称存储一种流派,那么此表

    song_name           genre
    --
    Toxic               Pop
    Itsy Bitsy Spider   Children's
    

    其中 song_name 是主键,在 5NF 中。 (还有 4NF 和 3NF 等等)。

    【讨论】:

      【解决方案2】:

      什么是钥匙?表应该满足哪些依赖关系?这些是我们回答您的问题所需要知道的。

      我的猜测是 ID 是唯一的关键,并且 ID->{Name,Genre} 并且没有其他重要的非关键依赖项。如果这是正确的,那么 Songs 在 3NF 中。更重要的是它在 BCNF 和 5NF 中。

      将字符串属性 Genre 替换为整数 Genre_ID 绝对与任何范式无关。

      【讨论】:

      • 您是对的,因为上面所有表格的键都是 ID。我忘了提。谢谢你的回答!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 2013-12-13
      • 2011-05-21
      • 1970-01-01
      • 2021-11-21
      • 2015-09-08
      • 2017-05-27
      相关资源
      最近更新 更多