我正在为一个项目制作一个基本的电影在线商店,我希望用户能够按类型选择电影,例如:
- 全部
- 恐怖
- 行动
- 纪录片
- 科幻
- ...
将电影存储在数据库中以匹配此结构的最佳方法是什么。
第一种方式
按类型对电影进行排序并创建单独的表格,即动作类型的表格,纪录片的表格,科幻的表格等等。使用这种方法,将没有明确的方法来连接表格以生成所有电影的列表
第二种方式
将所有电影放在一个表中,将流派放在另一个表中,并根据流派建立2之间的外键关系
还是有另一种更好的方法来做到这一点?
提前致谢
我正在为一个项目制作一个基本的电影在线商店,我希望用户能够按类型选择电影,例如:
将电影存储在数据库中以匹配此结构的最佳方法是什么。
第一种方式
按类型对电影进行排序并创建单独的表格,即动作类型的表格,纪录片的表格,科幻的表格等等。使用这种方法,将没有明确的方法来连接表格以生成所有电影的列表
第二种方式
将所有电影放在一个表中,将流派放在另一个表中,并根据流派建立2之间的外键关系
还是有另一种更好的方法来做到这一点?
提前致谢
我认为你的意思是类型,而不是性别。:) 我不认为peliculas 有性别。就个人而言,我会创建 3 个表。电影 (Peliculas)、流派和带有两者 ID 的查找表。这将允许电影出现在多个搜索中 - 您可能想要。例如,关于甲壳虫乐队的电影可能同时属于音乐和纪录片类型,这样如果用户搜索其中任何一个,它就会显示出来。
Peliculas (表1)
PeliculaId
other cols (name, etc)
类型(表2)
GenreId
GenreDescription
PelGenre(表 3)
PeliculaId FK
GenreId FK
鹈鹕
------------
PeliculaId Name Descript
------------------------------------------------------------------------------------------------
1 The Beatles Anthology Documentary series on The Beatles career
2 The Shawshank Redemption 2 good guys in jail become friends and get back at everyone
3 Star Wars Farm Boy saves Galaxy
类型
GenreId Descript
----------------------------------
1 Action
2 Crime
3 Drama
4 ScienceFiction
5 Documentary
6 Music
体裁
PeliculaId GenreId
------------------------
1 5
1 6
2 2
2 3
3 4
3 1
有两张桌子;一种用于电影,一种用于流派。
Movies {id, title, genre_id}
Genres {id, name}
按流派查询:
SELECT * FROM Movies WHERE genre_id = ?
要查询所有类型,只需从 WHERE 子句中删除genre_id 部分
SELECT * FROM Movies
类别表
name
id (unique)
电影表
id (unique, autoincremental)
other data
关系表
Cat_mov
movie_id (the id of the movie)
cat_id (the id of the categorie)
不是你的第一种方式:这不是一个关系数据库,因为你复制了类似的信息。
如果您希望建立关系,则第二种方式更合适。一个表中的电影 MovieType 在第二个表中。
Movies 表包含一个到 MovieType 的 FK,它列出了流派的名称。