В какой-то момент, если хотите, «может быть в A или B, но не в обоих»
Это шаблон «супер-ключ / подтип»
Создать новую таблицу ABкоторый имеет 2 столбца
- SomeUniqueValue, PK
- WhichChild char (1), ограничен 'a' или 'b'
Существует такжеуникальное ограничение для обоих столбцов
Тогда
- Добавьте столбец WhichChild в таблицы A и B. В A это всегда «a».В B всегда 'b'
- Добавлять внешние ключи от A к AB и от B к AB на оба столбца
Теперь SomeUniqueValue может быть только в Aили B.
Примечание: в надлежащей СУБД вы должны использовать проверочные ограничения или вычисляемые столбцы, чтобы ограничить WhichChild до «a» или «b» по мере необходимости.Но MySQL ограничен, поэтому вам нужно использовать триггеры в MySQL.Однако это проще, чем тестировать таблицу B для каждой вставки в A и т. Д.