2

テーブル A への外部キーとテーブル B への外部キーを単純に保持する多対多テーブル (TableAB) があります。テーブル自体にも主キー列を追加する必要があると常に感じています。通常は行います。しかし、学術的な観点から、それは 2nf、3nf、BCNF 規則のいずれかに違反しますか? 実際の一意性は追加されず、主キーと別の複合主キーを持つテーブルが作成されますが、重複していませんが、M2M テーブルが他のテーブルによって参照されているが興味がある場合に、関係を簡単に作成できます。彼らの意見についてそこにいる学者から聞くために。

すなわち。

TableA ( Aid int PK )

TableB ( Bid int PK )

TableAB ( Aid int, Bid int, ABID int PK ?????? )

ありがとう

4

1 に答える 1

1

RDBMS 理論の観点からは、TableAB に複合主キーがあります。

CREATE TABLE IF NOT EXISTS `TableAB` (
  `A_id` int(11) NOT NULL,
  `B_id` int(11) NOT NULL,
  PRIMARY KEY (`A_id`,`B_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

別の主キーの必要性は、RDBMS で動作するソフトウェアの必要性から生じます。一部の Microsoft ツールでは主キーの更新が許可されていないため、行を削除してから追加して変更する必要があります。別の主キーを使用すると、リレーションシップを簡単に更新できます。

慣例によるコーディングの世界では、CakePhp や Rails などのフレームワークは、ID という名前の列がテーブルの主キーになることを想定しています。http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association

Yii php フレームワークでは複合主キーが許可されているため、テーブルを次のように定義できます。

$this->createTable('course_student', array(
    'course_id' => 'INT NOT NULL',
    'student_id' => 'INT NOT NULL',
    'PRIMARY KEY (`course_id`,`student_id`)',
        ), 'ENGINE=InnoDB');
$this->addForeignKey("fk_cs_course", "course_student", "course_id", "course", "id", "CASCADE", "RESTRICT");
$this->addForeignKey("fk_cs_student", "course_student", "student_id", "student", "id", "CASCADE", "RESTRICT");
于 2013-03-20T01:08:28.637 に答える