0

作成した映画データベースにいくつかのテーブルを作成する準備をしています。Moviesテーブルはすでに作成されています。次のようになります。

 movieid INT NOT NULL PRIMARY KEY
 title VARCHAR(50)
 link  VARCHAR(100)
 release_date VARCHAR(10)

このデータをデータベースに入力するためにMySQL-pythonandを使用していることに注意してください。しかし、おそらくそれは問題ではありません。ScrapyMySQL

まだ入力されていない 3 つの追加テーブルを作成しました: ProducersActorsおよびDirectorsidname、が存在するという点で、これらのそれぞれは他のように見えますmovie title。次Actorsのようになります。

 actorid INT NOT NULL PRIMARY KEY
 actor   VARCHAR(40)
 title   VARCHAR(50)    <<<<------ This is the movie title from the Movies tables

ここで、テーブルからのテーブルとテーブルからのテーブルMovie To Actorを保持し、テーブルに列が存在しないという名前のテーブルを作成したいと思います。movieidMovieactoridActortitleActors

これを行うには2つの方法があると思います:

最初の方法:

として機能してすべてのデータをActorsテーブルに取得し、次にテーブルを作成し、適切な場所を追加してから列を削除します。titleforeign keyMovie To Actoridsmovies.titleActors.titletitleActors

2 番目の方法:

データを入力しているときにこれを行います。最初にMovie to Actorテーブルを作成し、キー制約を設定して、データがActorsテーブルに追加されたときにこれを自動更新するように設定します。物事が大幅に簡単になり、スタイル的にも優れていると思うので、私はこれを好みます. 誰かが私がこれを行う方法について教えてくれることを望んでいました. MySQLの命令をに外挿する方法を理解できると思いますMySQL-pythonが、前者の方法については助けが必要です。

4

1 に答える 1

1

最初にいくつかのポイント:

  • Actors および movies テーブルの actorid および movieid フィールドを手動で入力しない限り、これらの列に auto_increment を設定する必要があります。
  • movie.title を使用して他のものにリンクしている場合は、movies テーブルのその列に一意のインデックスを追加する必要があります。
  • 最終的には、actors テーブルから title 列を削除する必要があります。そうしないと、同じ俳優名に対して複数の行が表示される (冗長) か、俳優ごとに 1 つの映画しか表示されない (非現実的) ことになります。

あなたが言及した最初の方法では、実際には最初に movie_actor テーブルを作成してから、既存のデータを入力できます。

INSERT INTO movie_actor (movieid, actorid) SELECT movieid, actorid FROM movies INNER JOIN actors ON actors.title=movies.title;

次に、トリガーを使用できます。

delimiter //
CREATE TRIGGER add_actor
AFTER INSERT ON actors
FOR EACH ROW BEGIN
SET @movieid = (SELECT movieid FROM movies WHERE title=NEW.title);
IF @movieid IS NOT NULL THEN
    INSERT INTO movie_actor (movieid, actorid) VALUES (@movieid, NEW.actorid);
END IF;
END;
//
delimiter ;

オプション 1 に続いて、これらのテーブルにデータを入力するために使用している形式を使用して、movie_actor テーブルに個別にデータを入力することをお勧めします (たとえば、俳優を追加した後、movie_actor にマッピングを追加するだけで、俳優が出演していた映画を設定できます)。テーブル)。次に、俳優の映画のリストを取得したい場合は、次のことができます

SELECT title FROM movie_actor
INNER JOIN movies ON movies.movieid=movie_actor.movieid
WHERE actorid=????
于 2013-08-24T18:44:21.997 に答える