postgresql - "polymorphism"用于 FOREIGN KEY 约束

标签 postgresql database-design foreign-keys polymorphism referential-integrity

表中有这个字段:

room_id INT NOT NULL CONSTRAINT room_id_ref_room REFERENCES room

我有两种房间的三个 2 表:standard_roomfamily_room

如何做这样的事情:

room_id INT NOT NULL CONSTRAINT room_id_ref_room REFERENCES standard_room or family_room

我的意思是,room_id 应该引用或者 standard_room 或者 family_room。< br/> 有可能吗?

最佳答案

这是我一直在使用的模式。

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

也就是说,“子类”通过类型描述符列指向父类(super class)(这样指向的基类是正确的类型,并且父类(super class)的主键与子类。

关于postgresql - "polymorphism"用于 FOREIGN KEY 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28222533/

相关文章:

sql - 将两个相同的 id 以不同的名称连接到同一个表?

ruby-on-rails - 如何启用模型数据缓存?

amazon-web-services - DynamoDB 表建模。软删除解决方案

mysql - parking 场数据库设计

mysql - 错误 1215 : CANNOT ADD FOREIGN KEY CONSTRAINT ; Composite Foreign key

python - 如何在 SQLAlchemy 中动态选择要查询的列?

sql - 从查询结果表中读取列数及其类型(C语言)

database-design - 我应该将日志信息存储在主数据库表中吗?

hibernate - 带有 HSQLDB 的 TDD -- 删除外键

php - Laravel 4 - 迁移和外键问题