6

私は、データを格納するために SQL データベースに依存する映画カタログを設計しています。私はデータベース設計の専門家ではありません。正直なところ、基本的なデータベース クエリ以外にはあまり慣れていません。私の質問は、次のことを行う最も効率的な方法は何ですか。

現在、5つのテーブルが作成されています

Movies
------
[id] integer
[title] nvarchar(100)
[duration] integer
[year] datetime

People
------
[people_id] integer
[person] nvarchar(100)

Writers
-------
[id] integer
[people_id] integer

Directors
---------
[id] integer
[people_id] integer

Actors
------
[id] integer
[people_id] integer

基本的に、ジャンクション テーブルを使用した多対多の関係、映画 -> 作家 <-人、映画 -> 監督 <-人、最後に映画 -> 役者 <-人。People テーブルは、各役割に必要なデータを引き出すプールです。人は映画の監督とスター、作家と監督、または 3 つの役割すべてを兼ねることができるので、3 つのジャンクション テーブルがそれを解決すると信じていました。当然のことながら、人は多くの映画にも出演できます。だから、これがその方法だと思いました。

いくつかの Web 記事で多対多の関係のセットアップについて読みましたが、読めば読むほど、この状況をセットアップする方法がわからなくなります。ほとんどの場合、単一の分野に取り組むか、著者/本の類推を使用するだけで、自分の状況をどのように実装するかを理解するのに役立ちません.

前に述べたように、私の質問は、これはこれを行う効率的な方法ですか? それとも適切ですか?

映画を簡単にクエリして、それに関連するすべての情報をフォームに出力できるようにしたいと考えています。

ありがとう -Res

4

5 に答える 5

1

別々のテーブルを作成せず、などPeopleRolesを含む新しいテーブルを作成してから、関係テーブルを作成して、映画、人、役割を一度に結合します。'Actor''Director'

Movies
------
[id] integer
[title] nvarchar(100)
[duration] integer
[year] datetime

People
------
[people_id] integer
[person] nvarchar(100)

PeopleRoles
-----------
[role_id] integer
[name] nvarchar(100)

MovieCollaborators
------------------
[id] integer
[people_id] integer
[movie_id] integer
[role_id] integer

単一のJOIN.

于 2013-01-26T23:20:19.153 に答える
0

継承をシミュレートしていますが、派生型には異なるフィールドがないため、それらをすべて 1 つのテーブルに配置し、それらの型を示す記述子列を用意することもできます。

このモデリングの問題のもう 1 つの複雑な部分は、同じ人に多くの役割 (たとえば、書き込み、直接、スター) を実行させることができるということです。ロールの概念を導入する必要があると思います。次に、それは人ではなく役割にリンクします。ロール クラスは、多対多モデルの一般的な機能です。

于 2013-01-26T23:18:03.600 に答える
0

あなたが提案した 3 つの多対多のテーブルの代わりに、3 つの列を持つ 1 つのテーブル movie-people を用意することをお勧めします: MovieId、peopleId、roleType

roleType(俳優、監督、作家)でその人の役割がわかります

于 2013-01-26T23:18:43.550 に答える
0

単純なままである場合は、「ロール」列を含む単一の結合テーブルの他の回答で提案されているモデルを使用する必要があります。

ただし、特定のロールにのみ適用されるものをモデルに追加したい場合があります。たとえば、俳優は主役、脇役、またはカメオですか? この場合、質問で説明したモデルの方が優れています。このモデルの欠点は、映画への関与を一般的な方法で扱いたい場合、UNION多くのテーブルをまとめる必要があることです。

これはトレードオフです。ロール列を持つ単一の結合テーブルにより、ロールを一般的に扱いやすくなります。ロールごとに個別の結合テーブルを使用すると、ロールを異なる方法で簡単に処理できます。

于 2013-01-27T07:14:39.143 に答える