2

我正在构建一个包含两个表的电影数据库,一个包含电影名称,另一个包含演员姓名。如何交叉引用数据?

例如,电影名称表中的条目应该包含每部电影的演员列表,还是演员名称表中的条目应该包含演员的电影列表?

4

3 回答 3

3

您将需要一个连接两者的附加表,并且至少包含电影 ID 和演员 ID 作为其列。假设您的Actors表已actor_id作为其主键,并且Moviesmovie_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 (..., ...);
于 2012-04-30T19:00:06.283 回答
1

使用交叉表!有一个只有两列的表:movieID、actorID。

于 2012-04-30T18:59:55.977 回答
0

你应该有第三张桌子,一张叫做ActorInMovie. 该表应有 2 列。ActorID, MovieID.

这样,您将能够拥有多对多 rel。

于 2012-04-30T19:00:09.310 回答