看了一些教程后,我觉得在谈到一对多
和多对多
关系时,我仍然对基数感到困惑。我想在这里练习一个小例子,我知道我的设计在基数方面是错误的,这些实体之间的正确关系是什么?当我有像 FilmPeople
和 FilmGenre
最佳答案
关系看起来不错。但也存在一些问题。
- 命名约定:您应该将
People
表命名为Person
,因为您在其他任何地方都没有复数命名。 - 将
FilmDirector
表命名为Director
。请参阅下一点了解原因。执行此操作后,Director
表不应包含film_ID
列。 - 您的模型混合了逻辑模型和物理模型。让我解释。
FilmDirector
和Film
之间的关系是逻辑上的多对多关系。当在数据库中物理创建该关系时,它会遍历Film
->FilmDirector
和Director
->FilmDirector
表Film
到FilmDirector
一对多关系以及Director
到FilmDirector
一对多关系。FilmDirector
表连接Film
和Director
表建立多对多关系。因此,我建议将您的FilmDirector
表命名为Director
,以便连接表可以正确命名为FilmDirector
。在多对多关系中需要这样的连接表,因为不可能将外键引用的多个值放在一个表行中。连接表中的条目包含一个表中的每一行与另一表中的多行相关的条目。在此示例中,为了将一部Film
与多个Director
相关联,我们在FilmDirector
表中创建了多个条目。同样,为了将一个Director
与多个Film
相关联,我们在FilmDirector
表中创建条目。 - 您所显示的
Film
、FilmGenre
和Genre
之间的关系是Film
之间的物理多对多关系> 和流派
。如果您的模型是逻辑模型,则不应将其显示为 3 表关系。如果模型是物理模型,您应该将Film
和Director
多对多显示为 3 个表关系。因此,请决定是要显示物理模型还是逻辑模型,并相应地更改模型。
希望我的解释足够清楚!
关于database - 仍然对基数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273428/