【问题标题】:still confused about cardinality仍然对基数感到困惑
【发布时间】:2014-01-22 11:27:52
【问题描述】:

看了一些教程后,我觉得当谈到one to manymany to many 关系时,我仍然对基数感到困惑。我想在这里练习一个小例子,我知道我的设计在基数方面是错误的,这些实体之间的正确关系是什么?当我有 FilmPeopleFilmGenre 之类的 3 个表关系时,我会感到困惑

【问题讨论】:

    标签: database database-design cardinality


    【解决方案1】:

    关系看起来不错。不过也有一些问题。

    1. 命名约定:您应该将People 表命名为Person,因为您在其他任何地方都没有复数命名。
    2. FilmDirector 表命名为Director。请参阅下一点了解原因。一旦你这样做了Director 表不应该有film_ID 列。
    3. 您的模型混合了逻辑模型和物理模型。让我解释。 FilmDirectorFilm 之间的关系是逻辑上的多对多关系。当该关系在数据库中物理创建时,它通过Film->FilmDirectorDirector->FilmDirector 表与FilmFilmDirector 一对多和Director 到@987654336 @ 一对多关系。 FilmDirector 表连接FilmDirector 表以建立多对多关系。因此我建议将您的FilmDirector 表命名为Director,以便连接表可以正确命名为FilmDirector。在多对多关系中需要这样的连接表,因为不可能将多个外键引用值放在一个表行中。对于一个表中的每一行与另一表中的多行相关的条目进入连接表。在这个将一个Film 与多个Directors 关联的示例中,我们在FilmDirector 表中创建了多个条目。同样,为了将一个Director 与多个Films 关联起来,我们在FilmDirector 表中进行条目。
    4. 您在FilmFilmGenreGenre 之间显示的关系是FilmGenre 之间的物理多对多。如果您的模型是逻辑模型,则不应将其显示为 3 表关系。如果模型是物理模型,您应该将 FilmDirector 多对多显示为 3 表关系。因此,请决定是要显示物理模型还是逻辑模型,并相应地更改您的模型。

    希望我的解释足够清楚!

    【讨论】:

    • 您说filmDirector table as Director,那么如果Film(即电影本身)必须由一位或多位导演执导怎么办?难道我还没有 FilmDirector 和 Film……这就是我把它放在那里的原因
    • edit:是的,我在想电影有多位导演或只有一位导演
    • 非常感谢!...我又看了一遍,很高兴您告诉我逻辑和物理多对多关系之间的区别..希望我能给您 10 个赞
    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 2015-08-04
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多