实体或关系

Entity or relationship

我在画ER图。电影(名称、年份和评级)在剧院(名称和城市)放映。一部电影可以在很多影院放映,一个影院可以放映很多部电影。

"Show" 应该包含 theater_name 和电影的标题。 "show" 应该是电影和戏剧之间的关系还是我应该画一个 "showing" 关系和 link "show" 实体?

要在关系数据库中创建 n-to-n 关系,您需要一个具有两个关系的桥 table,每个 table.
首先,MovieTheaters都需要一个列作为主键(例如Id)(varchar列不合适PKsFKs 在性能方面)。您还需要一个桥梁 table,您可能已经猜到了(例如 Show),其中有两个外键,一个 MoveiId 和一个 TheaterId.

数据规范化

你说的地方:

"Show" should hold theater_name and title of the movie.

考虑 normalising 您的数据,以便与每个不同实体相关的信息保存在单个 table 中,仅包含此类实体的单个实例。

例如,有关电影的信息(包括其标题)将存储在 Movies table 中,而 存储在 table。有关剧院的信息将存储在 Theatres table 和 中 table.

然后 MoviesTheatres table 中的每条记录将使用单独的主键字段(例如 Movie_IDTheatre_ID 进行唯一引用),为此我建议使用长整型自动编号字段。

从那时起,每当引用其他 table 中的电影或剧院时,您将仅使用相关的 ID,而不会携带任何其他信息.

这不仅优化了数据库的大小和性能(因为整数占用的内存少得多,而且可以比字符串更有效地建立索引),而且您还只需要在一个位置维护数据:如果电影名称更改,您只需更改 Movies table 中的数据,这将自动反映在任何引用此 table.

的查询中

联结表

要回答有关如何表示多个影院放映电影的问题,多个影院也放映同一部电影:此 many-to-many 关系需要使用 junction table,也称为作为交易table桥梁tablelinktable,还有很多其他的名字。

这样的 table 提供了 MoviesTheatres table 相遇的交汇点。

牢记上述关于数据规范化的建议,这样的连接 table 应该只包含每个电影和剧院的唯一 ID,而不是 剧院名称或电影名称。

例如,这样的 table 可能看起来像这样:

+------------+------------+----------+
| Showing_ID | Theatre_ID | Movie_ID |
+------------+------------+----------+
|          1 |          1 |        2 |
|          2 |          1 |        3 |
|          3 |          2 |        1 |
|        ... |        ... |      ... |
+------------+------------+----------+