すべてのエンティティ型に共通の基本型を使用し、その基本型を介して関係を処理できます。これは、ディスクリミネータ列と外部キー関係を使用して事実上すべての ORM ツールで実行できることです (ただし、CLSA については詳しくありません)。
このアプローチでは、1 つのリレーションシップ テーブルが残ります。
編集:
これを設定する方法は次のとおりです。
CREATE TABLE base (
id int(10) unsigned NOT NULL auto_increment,
type enum('type1','type2') NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE type1 (
id int(10) unsigned NOT NULL,
PRIMARY KEY (id),
CONSTRAINT FK_type1_1 FOREIGN KEY (id) REFERENCES base (id)
);
CREATE TABLE type2 (
id int(10) unsigned NOT NULL,
PRIMARY KEY (id),
CONSTRAINT FK_type2_1 FOREIGN KEY (id) REFERENCES base (id)
);
CREATE TABLE x_relations (
from_id int(10) unsigned NOT NULL,
to_id int(10) unsigned NOT NULL,
PRIMARY KEY (from_id,to_id),
KEY FK_x_relations_2 (to_id),
CONSTRAINT FK_x_relations_1 FOREIGN KEY (from_id) REFERENCES base (id),
CONSTRAINT FK_x_relations_2 FOREIGN KEY (to_id) REFERENCES base (id)
ON DELETE CASCADE ON UPDATE CASCADE
);
ORM ソリューションが行 (または)type
の正しいサブタイプを見つけるのに役立つ識別子列 ( ) に注意してください。ORM のドキュメントには、ポリモーフィズムをベース テーブルにマップする方法に関するセクションが必要です。type1
type2