2012-04-13 9 views
1

「学生はコースに入学する」と私は私が主キーMySQLで関係テーブルを作成するには?

として cidcourses表を作成したプライマリキー

としてsidstudentsテーブルを作成している

を関係を持つ3つのテーブル、studentscoursesenrollを持っています

私は以下のようにenrollテーブルを作成する必要がありますが、キーワードreferencesにエラーが表示されますが、間違いは何ですか?あなたが別の関係テーブルを作成し、両方のテーブルのPK IDを取得し、この関係テーブルの中

に保存する必要があり、多くの関係テーブルへ

多くのための
create table enroll(
    grade char(2), 
    sid int not null, 
    cid int not null, 
    primary key(sid,cid), 
    foreign key cid references courses on delete cascade, 
    foreign key sid references students on delete cascade 
); 
+0

どのRDBMSを使用していますか?そして、この宿題ですか? – Aaron

+0

私はeclipseでMySQLを使用しています。はい、これは宿題です! – user1291453

答えて

3

外部テーブルで参照するフィールドを指定する必要があります。キーのフィールドは、()も括弧で囲む必要があります。

foreign key (cid) references courses (name_of_foreign_field_here) on delete cascade, 
      ^^     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
+0

ああ、ローカルのキーフィールドの周りに '()'を置く必要があります。私の悪い、私は答えを編集します。 –

+0

あなたは私の問題を解決しました:)ありがとうございました! – user1291453

+0

別の疑問ですが、今私は登録テーブルを作成しました。私の学生テーブルには200の 'sid'エントリがありました。どうすれば登録テーブルにすべてコピーできますか? – user1291453

0

アドバイスの簡単な作品

1対多の関係テーブルは、1つのテーブルのPKの属性を多くのテーブルの属性に入れ、常にそのようにリンクします。

0

私はあなたが中括弧でCIDとSIDを置く必要があると思います。これは試してみて、あなたの結果を知らせるサンプルコードです。 参照のサイズとデータタイプ、つまりコースと学生の主キーと登録の主キーが同じであることを確認してください。

CREATE TABLE `enroll` (
    `sid` INT(10) NOT NULL, 
    `cid` INT(10) NOT NULL, 
    PRIMARY KEY (`sid`, `cid`), 
    INDEX `FK_enroll_course` (`cid`), 
    CONSTRAINT `FK_enroll_course` FOREIGN KEY (`cid`) REFERENCES `course` (`id`) ON DELETE CASCADE, 
    CONSTRAINT `FK_enroll_student` FOREIGN KEY (`sid`) REFERENCES `student` (`id`) ON DELETE CASCADE 
) 
関連する問題