【问题标题】:What's wrong in this normalized table?这个规范化的表有什么问题?
【发布时间】:2021-09-04 06:31:58
【问题描述】:

我有以下album 表:

album_id(PK) album_name artist_name year songs

我的候选键是{id} 和{album_name, artist_name}。

现在,我要将表格规范化到3NF,我想知道artist_name列数据冗余的原因。

1NF

目标:列应该是原子的。

结果:

album:

album_id(PK) album_name artist_name year

song:

song_id(PK) album_id(FK) song_name

2NF

目标:非主属性(不存在于任何候选键中的列)对候选键没有部分功能依赖。

解决方案:我找不到任何部分功能依赖。 (也许我不知道表格中有它们。)

3NF

目标:非主属性对候选键没有传递函数依赖关系。

解决方案:我找不到任何传递依赖。

问题

虽然上面的表格看起来很规范,但我注意到了以下问题(可能更多):artist_name 列中的数据是多余的。拥有多张专辑的艺术家的姓名会被多次存储,这是我们反对的。

我在这里缺少什么?谢谢。

【问题讨论】:

  • 请注意"1NF" has many meanings.(所有这些都涉及将某些表与参数化结构的某些表替换为每个参数的列。)“关系”也没有。即使 1NF 删除了所谓的“非原子”属性,该词也没有标准含义,也没有标准的方法。如果歌曲的类型列表为 x,那么通常我们会期望 1NF 设计具有类型为 x 的属性歌曲。除非您提供相关的类型信息、“原子”的定义以及如何标准化为 1NF,否则我们无法知道您所做的是否正确。
  • 一个值多次出现本身并没有错,“冗余”没有特殊含义,规范化只会消除某些冗余。您的“问题”有很多重复的问题。请在考虑发布之前阅读手册和谷歌任何错误消息和许多清晰、简洁和准确的问题/问题/目标的措辞,带有和不带有您的特定名称/字符串/数字、“site:stackoverflow.com”和标签;阅读许多答案。反映你的研究。请参阅How to Ask、Help center 和投票箭头鼠标悬停文本。如果您发布问题,请使用一个措辞作为标题。
  • 您没有明确说明您的“问题”。您没有以“我们反对”的方式解释“冗余数据”或“多次存储”是什么意思,或者它们与 DB 规范化或 3NF 有什么关系,或者示例艺术家情况如何是“问题”,什么它是一个例子。 (您真的是指“多次”,您认为在关系或列中任何值都不应出现多次?即每一列都必须是超键/唯一的?否则,您到底是什么意思?如果是,为什么? 请准确地说出来。)
  • 感谢@philipxy 的cmets。我一定会在以后的帖子中纠正我在提出这个问题时所犯的错误。

标签: relational-database database-normalization


【解决方案1】:

我将创建一个名为艺术家的表,并在其中存储艺术家 ID 和名称,并在专辑表中使用外键约束对其进行引用。因此,如果您在专辑中有艺术家姓名,这将更改为艺术家 ID。如果您只是像现在一样拥有名称,那将不是问题,但是如果您有需要为艺术家存储的其他数据,那么无论如何您都必须创建表格,这会像您一样破坏当前的设计在专辑表中包含名称,在艺术家表中包含其余信息。

规范化的主要目标是减少冗余。艺术家姓名在专辑表中,如果您需要艺术家的姓名和其他艺术家信息,那么您将不得不包括专辑表和艺术家表,这没有意义,而且您不会有任何其他列除了名称之外,将表链接在一起或在专辑和艺术家表的两个地方复制数据,这将违反第一范式。

此外,如果名称位于专辑表中,您的数据将被拆分到两个表中。艺术家的名字实际上并不依赖于专辑,而是依赖于艺术家实体。这违反了存储在列中的值应具有与第一范式相同的域原则。

【讨论】:

  • 你是对的。你解释的是我的课程导师采取的方法。但是,为什么我在规范化(直到 3NF)之后不自动找到这个解决方案?这是否意味着正常化并不总是产生没有异常的关系?我想知道我在建模过程中遗漏了什么。
  • 我用我评论的内容更新了我的答案,这解释了你将如何有重复的数据违规/存储在列中的值应该是相同的域违规。
  • @Meylis 1. 什么异常? 2. 为什么3NF没有异常? (在 ETNF 之前,更高的 NF 比更低的 NF 没有更多的异常——在 4NF 和 5NF 之间——之后没有更高的 NF 去除更多。) 3. NF 只去除某些异常。 4. 并非所有被合理描述为裁员的事情都是不好的。 5. 存在并非异常的不良冗余。 PS 如果原始 album 中唯一的 FD 是其 CK 所暗示的,那么 1NF album 没有问题。
  • 感谢@markfila 和@philipxy 的输入。我还重读了 Codd 对关系模型的描述,发现原来的 album 不符合他对关系的描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2022-10-06
  • 2010-12-09
  • 2012-09-04
  • 1970-01-01
相关资源
最近更新 更多