Эту проблему можно решить, добавив таблицу супертипа (назовем ее Being
), которая имеет в качестве подтипов две таблицы Human
и Alien
. Тогда ограничение FOREIGN KEY
будет ссылаться на эту таблицу супертипа.
Супертип:
CREATE TABLE Being
( BeingId INT AUTO_INCREMENT
, ... other stuff about beings
, PRIMARY KEY (BeingId)
) ENGINE = InnoDB ;
подтипы:
CREATE TABLE Human
( BeingId INT --- not AUTO_INCREMENT
, ... other stuff about humans
, PRIMARY KEY (BeingId)
, CONSTRAINT Being_Human_fk
FOREIGN KEY (BeingId)
REFERENCES Being(BeingId)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB ;
CREATE TABLE Alien
( BeingId INT --- not AUTO_INCREMENT
, ... other stuff about aliens
, PRIMARY KEY (BeingId)
, CONSTRAINT Being_Alien_fk
FOREIGN KEY (BeingId)
REFERENCES Being(BeingId)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB ;
и таблица Spaceship
:
CREATE TABLE Spaceship
( SpaceshipId
, SpaceshipName
, OwnerId
, ... other stuff about spaceships
, PRIMARY KEY (SpaceshipId)
, CONSTRAINT Being_Spaceship_fk
FOREIGN KEY (OwnerId)
REFERENCES Being(BeingId)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB ;