实体或关系
Entity or relationship
我在画ER图。电影(名称、年份和评级)在剧院(名称和城市)放映。一部电影可以在很多影院放映,一个影院可以放映很多部电影。
"Show" 应该包含 theater_name 和电影的标题。 "show" 应该是电影和戏剧之间的关系还是我应该画一个 "showing" 关系和 link "show" 实体?
要在关系数据库中创建 n-to-n
关系,您需要一个具有两个关系的桥 table,每个 table.
首先,Movie
和Theaters
都需要一个列作为主键(例如Id
)(varchar
列不合适PKs
和FKs
在性能方面)。您还需要一个桥梁 table,您可能已经猜到了(例如 Show
),其中有两个外键,一个 MoveiId
和一个 TheaterId
.
数据规范化
你说的地方:
"Show" should hold theater_name and title of the movie.
考虑 normalising 您的数据,以便与每个不同实体相关的信息保存在单个 table 中,仅包含此类实体的单个实例。
例如,有关电影的信息(包括其标题)将存储在 Movies
table 中,而 仅 存储在 table。有关剧院的信息将存储在 Theatres
table 和 仅 中 table.
然后 Movies
和 Theatres
table 中的每条记录将使用单独的主键字段(例如 Movie_ID
和 Theatre_ID
进行唯一引用),为此我建议使用长整型自动编号字段。
从那时起,每当引用其他 table 中的电影或剧院时,您将仅使用相关的 ID,而不会携带任何其他信息.
这不仅优化了数据库的大小和性能(因为整数占用的内存少得多,而且可以比字符串更有效地建立索引),而且您还只需要在一个位置维护数据:如果电影名称更改,您只需更改 Movies
table 中的数据,这将自动反映在任何引用此 table.
的查询中
联结表
要回答有关如何表示多个影院放映电影的问题,多个影院也放映同一部电影:此 many-to-many 关系需要使用 junction table,也称为作为交易table、桥梁table、linktable,还有很多其他的名字。
这样的 table 提供了 Movies
和 Theatres
table 相遇的交汇点。
牢记上述关于数据规范化的建议,这样的连接 table 应该只包含每个电影和剧院的唯一 ID,而不是 剧院名称或电影名称。
例如,这样的 table 可能看起来像这样:
+------------+------------+----------+
| Showing_ID | Theatre_ID | Movie_ID |
+------------+------------+----------+
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
| ... | ... | ... |
+------------+------------+----------+
我在画ER图。电影(名称、年份和评级)在剧院(名称和城市)放映。一部电影可以在很多影院放映,一个影院可以放映很多部电影。
"Show" 应该包含 theater_name 和电影的标题。 "show" 应该是电影和戏剧之间的关系还是我应该画一个 "showing" 关系和 link "show" 实体?
要在关系数据库中创建 n-to-n
关系,您需要一个具有两个关系的桥 table,每个 table.
首先,Movie
和Theaters
都需要一个列作为主键(例如Id
)(varchar
列不合适PKs
和FKs
在性能方面)。您还需要一个桥梁 table,您可能已经猜到了(例如 Show
),其中有两个外键,一个 MoveiId
和一个 TheaterId
.
数据规范化
你说的地方:
"Show" should hold theater_name and title of the movie.
考虑 normalising 您的数据,以便与每个不同实体相关的信息保存在单个 table 中,仅包含此类实体的单个实例。
例如,有关电影的信息(包括其标题)将存储在 Movies
table 中,而 仅 存储在 table。有关剧院的信息将存储在 Theatres
table 和 仅 中 table.
然后 Movies
和 Theatres
table 中的每条记录将使用单独的主键字段(例如 Movie_ID
和 Theatre_ID
进行唯一引用),为此我建议使用长整型自动编号字段。
从那时起,每当引用其他 table 中的电影或剧院时,您将仅使用相关的 ID,而不会携带任何其他信息.
这不仅优化了数据库的大小和性能(因为整数占用的内存少得多,而且可以比字符串更有效地建立索引),而且您还只需要在一个位置维护数据:如果电影名称更改,您只需更改 Movies
table 中的数据,这将自动反映在任何引用此 table.
联结表
要回答有关如何表示多个影院放映电影的问题,多个影院也放映同一部电影:此 many-to-many 关系需要使用 junction table,也称为作为交易table、桥梁table、linktable,还有很多其他的名字。
这样的 table 提供了 Movies
和 Theatres
table 相遇的交汇点。
牢记上述关于数据规范化的建议,这样的连接 table 应该只包含每个电影和剧院的唯一 ID,而不是 剧院名称或电影名称。
例如,这样的 table 可能看起来像这样:
+------------+------------+----------+
| Showing_ID | Theatre_ID | Movie_ID |
+------------+------------+----------+
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
| ... | ... | ... |
+------------+------------+----------+