将数据库表规范化为1NF

时间:2015-10-08 18:37:13

标签: database database-design relational-database normalization database-normalization

我正在为DVD租赁店创建一个数据库,我有各种与此问题相关的实体,例如Film, FilmStar

对于每部电影,您都会记录其独特的编号,标题,制作年份,类别(动作冒险,科幻,恐怖,浪漫,喜剧,经典,儿童),导演以及所有明星出现在其中。对于每部电影,您还要存储DVD hire的类型(新版本,经典版本,其他版本)。

我大多不确定“所有出现在其中的星星”。我首先想到的是'Film'实体中有一个属性,例如filmStar,然后每个星都会被插入到该属性中,例如:每部电影的“John Doe,Jane Doe”。但后来我意识到这不会是1NF:“属性的域必须只包含原子值,属性的值必须是来自该属性域的单个值”,因为它包含多个值,不是原子的。

然后我想到了一个包含某些属性的独立实体,例如:filmID, filmStarID。所以John Doe的电影明星ID为'0001'(所有这些都在FilmStar实体中,这是一个独立的实体)。但是会出现同样的问题,例如filmID属性将拥有电影明星所主演的所有filmID's,例如:John Doe将拥有“101,115,009”。这也不是1NF。

我只是想知道你对此有何想法?

1 个答案:

答案 0 :(得分:1)

您所描述的是多对多关系。存储这种关系需要两个相关实体之间的连接表。

所以你在这里有两个基本实体:

Film
--------
ID
Title
etc.

CastMember
--------
ID
Name
etc.

这些都不能将他们的关系存储到另一个,因为那将是一个值列表而不是单个值。因此,关系本身基本上成为独立于主要实体的实体。像这样:

FilmCastMember
--------
FilmID
CastMemberID
NameInFilm
etc.

此关系实体将存储特定于关系本身的任何信息,但不描述相关实体的描述。例如,上面的行包括NameInFilm,它将是该电影中该演员所扮演的角色名称。

相关问题