我将有关电影的信息存储在 MySQL 数据库中。我希望每部电影都有自己的类型。然而,一部电影可以有多个类型的值(例如“动作”和“喜剧”)。存储此类信息的最佳方式是什么?创建 2 个表是否是个好主意:一个包含电影(列:“标题”、“年份”等),另一个包含流派?流派表会是什么样子?
问问题
1182 次
2 回答
4
实际上,您需要三张表来创建多对多关系,一张用于电影,一张用于流派,一张用于关系。
例如:
Table film:
- id (PRIMARY)
- name
- year
- ....
Table genre:
- id (PRIMARY)
- name
Table film_genre:
- id_film (PRIMARY)
- id_genre (PRIMARY)
于 2013-07-03T13:07:01.863 回答
0
从逻辑上讲,流派是静态数据。在这种情况下,您可以在一个字段中存储多个值。为此,您只需要 2 张桌子。电影(动态)和流派(静态)。
表类型将只有 2 个字段:
- name
- bit
因此流派表将具有预定义的静态数据,例如:
Comedy - 1
Horror - 2
Action - 4
Porn - 8
Dram - 16
表膜应如下所示:
- i_film
- name
- year
- genre
- ...
在字段Films
.genre 中,您需要将流派存储为位掩码。
例如:
类型 = 4 表示这部电影是动作片
流派 = 5 - 流派是动作和喜剧
流派 = 7 - 流派是动作、恐怖和喜剧
流派 = 9 - 流派是色情和喜剧
ETC
要按类型获取电影,您可以轻松地:
SELECT * FROM Films WHERE (genre & 8) > 0 - all Porn films
SELECT * FROM Films WHERE (genre & 1) > 0 - all Comdey films
于 2013-07-03T13:27:46.770 回答