Я знаю, что я, вероятно, буду распят или что-то еще, но здесь идет ...
Я сделал это так для своей «особой, уникальной и нестандартной» бизнес-потребности (= (Боже, я начинаю звучать как SQL DDL, даже когда говорю).
Вот пример:
CREATE TABLE IF NOT EXISTS PERSON(
ID INT,
CONSTRAINT PRIMARY KEY (ID),
ADDRESS_ID INT NOT NULL DEFAULT 1,
DESCRIPTION VARCHAR(255),
CONSTRAINT PERSON_UQ UNIQUE KEY (ADDRESS_ID, ...));
INSERT INTO PERSON(ID, DESCRIPTION)
VALUES (1, 'GOVERNMENT');
CREATE TABLE IF NOT EXISTS ADDRESS(
ID INT,
CONSTRAINT PRIMARY KEY (ID),
PERSON_ID INT NOT NULL DEFAULT 1,
DESCRIPTION VARCHAR(255),
CONSTRAINT ADDRESS_UQ UNIQUE KEY (PERSON_ID, ...),
CONSTRAINT ADDRESS_PERSON_FK FOREIGN KEY (PERSON_ID) REFERENCES PERSON(ID));
INSERT INTO ADDRESS(ID, DESCRIPTION)
VALUES (1, 'ABANDONED HOUSE AT THIS ADDRESS');
ALTER TABLE PERSON ADD CONSTRAINT PERSON_ADDRESS_FK FOREIGN KEY (ADDRESS_ID) REFERENCES ADDRESS(ID);
<... жизнь продолжается ... независимо от того, предоставляете ли вы и обращаетесь или нет к человеку, и наоборот>
Я определил одну таблицу, затем другую таблицу, ссылающуюся на первую, а затем изменил первую, чтобы отразить ссылку на вторую (которая не существовала на момент создания первой таблицы). Он не предназначен для конкретной базы данных; если мне это нужно, я просто пробую это, и если это работает, то я использую это, если нет, то я пытаюсь избежать этой потребности в дизайне (я не всегда могу это контролировать, иногда дизайн передается мне как есть) , если у вас есть адрес без человека, то он принадлежит «правительственному» человеку. Если у вас есть «бездомный», то он получает адрес «заброшенного дома». Я запускаю процесс, чтобы определить, в каких домах нет пользователей