私は2つのテーブルで映画データベースを構築しています。1つは映画の名前を含み、もう1つは俳優の名前を含みます。データを相互参照するにはどうすればよいですか?
たとえば、映画名テーブルのエントリに各映画の俳優のリストを含める必要がありますか、それとも俳優名テーブルのエントリに俳優の映画のリストを含める必要がありますか?
2 つをリンクし、少なくとも映画 ID と俳優 ID を列として含む追加のテーブルが必要になります。Actors
テーブルがactor_id
主キーとしてあり、主キーとしてMovies
持っていると仮定しますmovie_id
。このテーブルには、その映画に固有の俳優に関する情報 (キャラクターの名前やその他のキャラクター関連情報など) を含めることもできます。
CREATE TABLE actors_in_movies (
/* Use whatever auto increment keyword is needed for your RDBMS */
id INT NOT NULL PRIMARY KEY <auto increment>,
actor_id INT,
movie_id INT,
character_name VARCHAR(),
other_character_info VARCHAR(),
character_best_quote TEXT,
FOREIGN KEY (actor_id) REFERENCES actors (actor_id),
FOREIGN KEY (movie_id) REFERENCES actors (movies_id)
);
次の効果を得るために何かを使用します。
SELECT
actors.*,
movies.name
FROM
actors
JOIN actors_in_movies ON actors.actor_id = actors_in_movies.actor_id
JOIN movies ON movies.movie_id = actors_in_movies.movie_id
WHERE actors.actor_id = <some actor id>
次の効果を得るために何かを使用します。
SELECT
actors.*
FROM
actors
JOIN actors_in_movies ON actors.actor_id = actors_in_movies.actor_id
JOIN movies ON movies.movie_id = actors_in_movies.movie_id
WHERE movies.movie_id = <some movie id>
actors_in_movies
映画に俳優を追加するには、テーブルに行を挿入します。
INSERT INTO actors_in_movies (actor_id, movie_id) VALUES (..., ...);
クロステーブルを使おう!movieID、actorID の 2 つの列のみを持つテーブルを用意します。
という名前の 3 番目のテーブルが必要ActorInMovie
です。このテーブルには 2 つの列が必要です。ActorID, MovieID
.
このようにして、多対多の rel を持つことができます。