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