1

映画に関する情報を MySQL データベースに保存しています。私はすべての映画にジャンルを持たせたいと思っています。ただし、映画のジャンルには複数の値がある場合があります (「アクション」と「コメディ」など)。そのような情報を保存する最良の方法は何ですか? 映画 (列: "タイトル"、"年" など) を含むテーブルと、ジャンルを含むテーブルの 2 つのテーブルを作成することをお勧めします。ジャンル テーブルはどのようになりますか?

4

2 に答える 2

4

実際には、多対多のリレーションを作成するには 3 つのテーブルが必要です。1 つは映画用、1 つはジャンル用、もう 1 つはリレーション用です。

例えば:

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

論理的にジャンルは静的データです。このような場合、1 つのフィールドに複数の値を格納できます。このために必要なテーブルは 2 つだけです。映画 (動的) とジャンル (静的)。

テーブルのジャンルには 2 つのフィールドしかありません。

- name
- bit

したがって、Genres テーブルには、次のような事前定義された静的データがあります。

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

テーブル フィルムは次のようになります。

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

フィールドFilms.genre には、ジャンルをビット マスクとして格納する必要があります。

例えば:

ジャンル = 4 は、この映画がアクションであることを意味します

ジャンル = 5 - ジャンルはアクションとコメディ

ジャンル = 7 - ジャンルはアクション、ホラー、コメディ

ジャンル = 9 - ジャンルはポルノとコメディ

ジャンル別に映画を入手するには、次のことが簡単にできます。

  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 に答える