Jah*_*nov 12 postgresql polymorphism database-design referential-integrity foreign-keys
表中有这个字段:
room_id INT NOT NULL CONSTRAINT room_id_ref_room REFERENCES room
Run Code Online (Sandbox Code Playgroud)
我有两个房间的三张桌子:standard_room和family_room
怎么做这样的事情:
room_id INT NOT NULL CONSTRAINT room_id_ref_room REFERENCES standard_room or family_room
Run Code Online (Sandbox Code Playgroud)
我的意思是,room_id应该引用任何 standard_room 或 family_room.
有可能这样做吗?
Sin*_*ion 16
这是我一直在使用的模式.
CREATE TABLE room (
room_id serial primary key,
room_type VARCHAR not null,
CHECK CONSTRAINT room_type in ("standard_room","family_room"),
UNIQUE (room_id, room_type)
);
CREATE_TABLE standard_room (
room_id integer primary key,
room_type VARCHAR not null default "standard_room",
FOREIGN KEY (room_id, room_type) REFERENCES room (room_id, room_type),
CHECK CONSTRAINT room_type = "standard_room"
);
CREATE_TABLE family_room (
room_id integer primary key,
room_type VARCHAR not null default "family_room",
FOREIGN KEY (room_id, room_type) REFERENCES room (room_id, room_type),
CHECK CONSTRAINT room_type = "family_room"
);
Run Code Online (Sandbox Code Playgroud)
也就是说,超类的'子类'指向一个类型描述符列(这样指向的基类具有正确的类型,并且超类的主键与子类相同) .
| 归档时间: |
|
| 查看次数: |
3952 次 |
| 最近记录: |