我正在为一个项目制作一个基本的电影在线商店,我希望用户能够按类型选择电影,例如:
在数据库中存储电影以匹配此结构的最佳方法是什么。
第一种方式
按流派对电影进行排序,并创建单独的表格,即动作类型的表格,一个用于纪录片的表格,一个用于科幻小说的表格,以及其他表格。使用这种方法,没有明确的方法来加入表格以生成所有电影的列表
第二种方式
将所有电影放在一张表中,将类型放在另一个表中,并根据类型建立2之间的外键关系
还是有另一种更好的方法吗?
提前致谢
答案 0 :(得分:4)
我认为你的意思是流派,而不是性别。 :)我不认为peliculas有性别。就个人而言,我会创建3个表。电影(Peliculas),类型和查找表与两者的ID。这将允许电影显示在多个搜索中 - 您可能需要这些搜索。例如,关于甲壳虫乐队的电影可能属于音乐和纪录片类型,并且这种方式会在用户搜索的情况下显示。
Peliculas(表1)
PeliculaId
other cols (name, etc)
类型(表2)
GenreId
GenreDescription
PelGenre(表3)
PeliculaId FK
GenreId FK
<强> Peliculas 强>
------------
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
<强> PelGenre 强>
PeliculaId GenreId
------------------------
1 5
1 6
2 2
2 3
3 4
3 1
答案 1 :(得分:1)
不是你的第一种方式:这不是关系数据库,因为你像信息一样复制。
如果您希望成为关系型,第二种方式更合适。 一张桌子里的电影 第二个表中的MovieType。
电影表包含一个FK到MovieType,其中列出了该类型的名称。
答案 2 :(得分:1)
类别表
name
id (unique)
电影表
id (unique, autoincremental)
other data
关系表
<强> Cat_mov 强>
movie_id (the id of the movie)
cat_id (the id of the categorie)
答案 3 :(得分:1)
有两张桌子;一部用于电影,一部用于流派。
Movies {id, title, genre_id}
Genres {id, name}
按类型查询:
SELECT * FROM Movies WHERE genre_id = ?
要查询所有类型,只需从WHERE子句中删除genre_id部分
SELECT * FROM Movies