从 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");