gpt4 book ai didi

mysql - 如何将其归一化为 1NF/2NF?

转载 作者:搜寻专家 更新时间:2023-10-30 22:33:36 25 4
gpt4 key购买 nike

我一直在研究规范化,但不太确定如何规范化此数据库?

假设我有这样的东西:

Table: Movies

| MovieID | Title | Rating | StarID | Star |
| 1 | Blah | R | 1 | Joe Johnson |
| 2 | Blah2 | R | 1, 2 | Joe Johnson, John Johnson |

1NF 看起来像这样还是我错了?

Table: Movies

| MovieID | Title | Rating |
| 1 | Blah | R |
| 2 | Blah2 | R |

Table: Movies2
| Movie ID | StarID | Star |
| 1 | 1 | Joe Johnson |
| 2 | 2 | John Johnson |

那么 2NF 看起来像什么(如果我是对的)?

最佳答案

不完全规范化表格,而是将规范化形式视为不同的阶段总是很奇怪。

无论如何:该表违反了 NF 1,因为数据不是原子的(1、2Joe Johnson、John Johnson)。您可以通过在列中包含更多记录而不是列表将其转换为 NF 1:

| MovieID | Title | Rating | StarID | Star         || 1       | Blah  | R      | 1      | Joe Johnson  || 2       | Blah2 | R      | 1      | Joe Johnson  || 2       | Blah2 | R      | 2      | John Johnson |

此表的典型主键是 MovieID + StarID。 (并且表名不再是 Movie,因为现在一行代表的不是一部电影,而是一对电影 Actor 。)

此表违反了 NF 2,因为 Star 列不依赖于 MovieID + StarID,而是仅依赖于 StarID。

顺便说一句,这是一个非常奇怪的例子,MovieID 和 StarID 是人工 ID。为什么有人会创建一个 StarId,但将其放在 Movie 表中?看起来很有建设性。并且可以通过删除冗余列轻松转换为 NF 2:

| MovieID | Title | Rating | Star         || 1       | Blah  | R      | Joe Johnson  || 2       | Blah2 | R      | Joe Johnson  || 2       | Blah2 | R      | John Johnson |

或者保留 ID 并添加一个 Star 表:

| MovieID | Title | Rating |StarID| 1       | Blah  | R      |1| 2       | Blah2 | R      |1| 2       | Blah2 | R      |2| StarID | Star         || 1      | Joe Johnson  || 2      | John Johnson |

只是,没有人会那样做。您根本不会停留在 NF 2。

关于mysql - 如何将其归一化为 1NF/2NF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40593616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com