sql >> Databasteknik >  >> RDS >> PostgreSQL

polymorfism för utländska nyckelbegränsningar

Här är mönstret jag har använt.

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

Det vill säga, "underklasserna" pekar på superklassen, i form av en typdeskriminatorkolumn (så att den pekade till basklassen är av rätt typ, och att primärnyckeln för superklassen är densamma som underklasserna




  1. AMD EPYC 7002-seriens processorer och SQL Server

  2. Spring Batch - Det går inte att skapa metadatatabeller på Postgres och ladda faktiska data till mysql

  3. (Oracle SQL) Fångar ett unikt begränsningsfel

  4. Hur lagrar jag dagliga poster från en mysql-tabell till en annan?