database - 仍然对基数感到困惑

标签 database database-design cardinality

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

这样的 3 个表关系时,我会感到困惑

enter image description here

最佳答案

关系看起来不错。但也存在一些问题。

  1. 命名约定:您应该将 People 表命名为 Person,因为您在其他任何地方都没有复数命名。
  2. FilmDirector 表命名为 Director。请参阅下一点了解原因。执行此操作后,Director 表不应包含 film_ID 列。
  3. 您的模型混合了逻辑模型和物理模型。让我解释。 FilmDirectorFilm 之间的关系是逻辑上的多对多关系。当在数据库中物理创建该关系时,它会遍历 Film->FilmDirectorDirector->FilmDirectorFilmFilmDirector 一对多关系以及 DirectorFilmDirector 一对多关系。 FilmDirector 表连接 FilmDirector 表建立多对多关系。因此,我建议将您的 FilmDirector 表命名为 Director,以便连接表可以正确命名为 FilmDirector。在多对多关系中需要这样的连接表,因为不可能将外键引用的多个值放在一个表行中。连接表中的条目包含一个表中的每一行与另一表中的多行相关的条目。在此示例中,为了将一部 Film 与多个 Director 相关联,我们在 FilmDirector 表中创建了多个条目。同样,为了将一个 Director 与多个 Film 相关联,我们在 FilmDirector 表中创建条目。
  4. 您所显示的 FilmFilmGenreGenre 之间的关系是 Film 之间的物理多对多关系> 和流派。如果您的模型是逻辑模型,则不应将其显示为 3 表关系。如果模型是物理模型,您应该将 FilmDirector 多对多显示为 3 个表关系。因此,请决定是要显示物理模型还是逻辑模型,并相应地更改模型。

希望我的解释足够清楚!

关于database - 仍然对基数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273428/

相关文章:

java - 出现错误 "Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements"

sql - 我应该在每个表中都有标识列吗?

php - 在MySQL中是存储冗余信息还是在必要时连接表更好?

rdf - SPARQL 的基数限制

asp.net - 如何使用ms访问数据库制作简单的ASP.net登录表单

php - Laravel 是否可以改进 Auth::id() 查询?

mysql - 关于中低基数列上的mysql索引的问题

sql - 具有复合主键的表的基数不好

database - 为什么在测试中使用数据库会出现问题?

logging - 支付系统的数据库设计