PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

polymorphisme pour les contraintes FOREIGN KEY

Voici le modèle que j'ai utilisé.

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

C'est-à-dire que les 'sous-classes' pointent vers la super-classe, au moyen d'une colonne de descriminateur de type (de sorte que la classe de base pointée soit du type correct, et que la clé primaire de la super-classe soit la même que les classes enfants .