我正在构建一个包含两个表的电影数据库,一个包含电影名称,另一个包含演员名称。如何交叉引用数据?
例如,电影名称表中的条目是否应包含每部电影的演员列表,或者演员姓名表中的条目是否应包含演员的电影列表?
答案 0 :(得分:3)
您将需要一个链接两者的附加表,并至少包含电影ID和actor 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 (..., ...);
答案 1 :(得分:1)
使用交叉表!有一个只有两列的表:movieID,actorID。
答案 2 :(得分:0)
你应该有第三个表,一个叫ActorInMovie
。该表应该有2列。 ActorID, MovieID
。
这样,你就能拥有多对多的。