您可以對所有實體類型使用通用基類型,並通過該基類型處理關係 - 實際上,任何ORM工具都可以使用鑑別器列和外鍵關係進行處理(我不熟悉CLSA,雖然)。
這種方法只給你一個關係表。
編輯: 這是你如何進行設置:
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
);
注意鑑別列(type
),這將有助於你的ORM解決方案找到一個行(type1
或type2
)正確的亞型。 ORM文檔應該有一個關於如何映射多態與基表的部分。
而且我仍然可以保留不同的實體表,或者我需要以某種方式將所有屬性放在一張表中?我在這裏有點困惑... – Yuval 2008-09-28 16:15:26