我正在为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。
我只是想知道你对此有何想法?
答案 0 :(得分:1)
您所描述的是多对多关系。存储这种关系需要两个相关实体之间的连接表。
所以你在这里有两个基本实体:
Film
--------
ID
Title
etc.
CastMember
--------
ID
Name
etc.
这些都不能将他们的关系存储到另一个,因为那将是一个值列表而不是单个值。因此,关系本身基本上成为独立于主要实体的实体。像这样:
FilmCastMember
--------
FilmID
CastMemberID
NameInFilm
etc.
此关系实体将存储特定于关系本身的任何信息,但不描述相关实体的描述。例如,上面的行包括NameInFilm
,它将是该电影中该演员所扮演的角色名称。