如何在SQL中存储一个属性的多个值?

时间:2013-07-03 13:05:26

标签: php mysql sql types structure

我正在将数据存储在MySQL数据库中。我希望每部电影都有它的流派。但是,一部电影可能有不止一个类型的价值(例如“动作”和“喜剧”)。存储此类信息的最佳方式是什么?创建2个表是一个好主意:一个是电影(列:“标题”,“年”等),另一个是流派?流派表格如何?

2 个答案:

答案 0 :(得分:4)

实际上你需要三个表来创建多对多关系,一个用于电影,一个用于流派,一个用于关系。

例如:

Table film:
- id (PRIMARY)
- name
- year
- ....

Table genre:
- id (PRIMARY)
- name

Table film_genre:
- id_film (PRIMARY)
- id_genre (PRIMARY)

答案 1 :(得分:0)

逻辑类型是静态数据。在这种情况下,您可以在一个字段中存储多个值。为此,您只需要2张桌子。 电影(动态)和流派(静态)。

表格类型只有2个字段:

- name
- bit

因此,Genres表将具有预定义的静态数据,如:

Comedy - 1
Horror - 2
Action - 4
Porn - 8
Dram - 16

表格应如下所示:

- i_film
- name
- year
- genre
- ...

在字段Films。流派中,您需要将类型存储为位掩码。

例如:

genre = 4意味着这部电影是动作

genre = 5 - 类型是Action和Comdey

genre = 7 - 类型是动作,恐怖和喜剧

genre = 9 - 流派是色情和喜剧

要按流派获取电影,您可以轻松:

  SELECT * FROM Films WHERE (genre & 8) > 0  - all Porn films
  SELECT * FROM Films WHERE (genre & 1) > 0  - all Comdey films