Я читал наиболее распространенные ошибки проектирования баз данных, сделанные разработчиками Q & A в stackoverflow. При первом ответе была фраза об эксклюзивной дуге:
Исключительная дуга является распространенной ошибкой, когда таблица создается с двумя или более внешними ключами, где один и только один из них может быть ненулевым. Большая ошибка. С одной стороны, становится намного сложнее поддерживать целостность данных. В конце концов, даже при ссылочной целостности ничто не препятствует установке двух или более этих внешних ключей (несмотря на сложные ограничения проверки).
Я действительно не понимаю, почему исключительная дуга - это зло. Вероятно, я не понял основы этого. Есть ли хорошее объяснение эксклюзивных дуг?
источник
alter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null))
. Я не люблю эксклюзивные дуги, но их можно применять с помощью ограничения проверки. Конечно, ограничение FK также должно присутствовать.В эксклюзивных дугах нет ничего плохого. Просто примените соответствующее бизнес-правило, используя проверочное ограничение. Большинство основных систем управления базами данных поддерживают проверочные ограничения (Oracle, SQL Server, PostgreSQL). Если вы используете инструмент моделирования данных, то есть большая вероятность, что ваш инструмент автоматически сгенерирует код для реализации проверочного ограничения.
источник
Эксклюзивная дуга очень полезна в концептуальном или логическом дизайне. Это не значит, что вы должны реализовать этот способ. В более раннем примере дизайнер может решить реализовать дизайн с тремя таблицами. Один для парковки, один для работника и один для технического обслуживания.
источник