2012-03-02 5 views
0

私はMySQLのworkbench 5.2で作業しています。私は自分のデータベースのEER図を作成しています。テーブル間の多対多の関係を作成すると、それらのテーブルはすでに他のテーブルとの関係を持っています。あなたが参加している2つのテーブルの他の関係のすべて。私の質問です:それらの他のすべてのキーを持つ必要がありますか?あなたは結合テーブルのプライマリキーを持っているだけで、関連している2つのテーブルのIDだけを持つことはできませんか?それとも私は何かを見落としていますか?あなたはそれが2つのだけのテーブルにリンクしていても複数のものへの外部キーを持っている物語のテーブルで見ることができるようにMySQLデータベースで多対多の関係を行う場合、すべてのキーIDを結合テーブルに転送する必要がありますか?

-- ----------------------------------------------------- 
    Table `test`.`storys_has_comments` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `test`.`storys_has_comments` (
    `storys_id` INT NOT NULL , 
    `storys_user_id` INT NOT NULL , 
    `comments_id` INT NOT NULL , 
    PRIMARY KEY (`storys_id`, `storys_user_id`, `comments_id`) , 
    INDEX `fk_storys_has_comments_comments1` (`comments_id` ASC) , 
    INDEX `fk_storys_has_comments_storys1` (`storys_id` ASC, `storys_user_id` ASC)) 
ENGINE = MyISAM; 

    -- ----------------------------------------------------- 
    Table `test`.`storys` 
    -- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `test`.`storys` (
    `id` INT NOT NULL , 
    `user_id` INT NOT NULL , 
    `catagories_id` INT NOT NULL , 
    PRIMARY KEY (`id`, `user_id`, `catagories_id`) , 
    INDEX `fk_storys_user` (`user_id` ASC) , 
    INDEX `fk_storys_catagories1` (`catagories_id` ASC)) 
    ENGINE = MyISAM; 

-- ----------------------------------------------------- 
Table `test`.`comments` 
-- ----------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `test`.`comments` (
    `id` INT NOT NULL , 
    `body` TINYTEXT NULL , 
    PRIMARY KEY (`id`)) 
ENGINE = MyISAM; 

:ここ

は私のDBの一部です。

答えて

0

リンクするテーブルのすべての主キーが必要です。

プライマリキーを正しく選択しているかどうかはわかりません。一意のID story_idを持つ場合、複合キーの一部として 'user_id'と 'catagories_id'を使用するのはなぜですか?

外部キーをプライマリキーと混同していますか?

+0

私は理解しようとしているものの例を追加しました。 –

+0

質問の変更を反映するように編集 – Void

+0

ありがとうございます。私は私が従うことを確信していない。 storys_has_commentsテーブルが主キーをstory_idに変更する必要があると言っていますか?あなたの2番目の質問まで私は違いを知っていると信じています...私はそれを理解しています:各テーブルにはプライマリキーが1つしかなく、プライマリキーは決して同じものを2回持つことはできません。外部キーは、データベース内の別のテーブルのプライマリキーを参照する方法ですが、これも繰り返さないでください。これは正しいですか? –

関連する問題