数据库设计:按流派组织项目(电影)

时间:2012-06-07 23:04:23

标签: database database-design normalization

我正在为一个项目制作一个基本的电影在线商店,我希望用户能够按类型选择电影,例如:

  • 全部
  • 恐怖
  • 行动
  • 纪录片
  • 科幻
  • ...

在数据库中存储电影以匹配此结构的最佳方法是什么。

第一种方式

按流派对电影进行排序,并创建单独的表格,即动作类型的表格,一个用于纪录片的表格,一个用于科幻小说的表格,以及其他表格。使用这种方法,没有明确的方法来加入表格以生成所有电影的列表

第二种方式

将所有电影放在一张表中,将类型放在另一个表中,并根据类型建立2之间的外键关系

还是有另一种更好的方法吗?

提前致谢

4 个答案:

答案 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