我一直在研究规范化,我不太确定如何规范化这个数据库?
假设我有这样的东西:

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:
|电影ID片名收视率明星ID明星|
| 1布拉赫R 1乔·约翰逊|
| 2 blah2 r 1乔·约翰逊|
| 2 blah2 r 2约翰·约翰逊|
此表的典型主键是movieid+starid。(表名不应该再是movie,因为一行现在不代表一个movie,而是一个movie actor对。)
此表违反nf 2,因为star列不同时依赖于movieid+starid,而只依赖于starid。
这是一个非常奇怪的例子,movieid和starid是人工id。为什么会有人创建一个starid,但把它放在电影桌上?看起来很有结构感。通过移除冗余列,它可以很容易地转换为NF 2:
|电影ID片名收视率明星|
|乔·约翰逊|
| 2 blah2 r乔·约翰逊|
|约翰·约翰逊|
或者保留id并添加星表:
|电影名
| 1布拉赫R 1
| 2叶片2 R 1
| 2叶片2 R 2
|星号|
| 1乔·约翰逊|
| 2约翰·约翰逊|
只是,没人会那样做。你只是不停在NF2。

09-26 23:40