Есть 2 пары таблиц.
Некий справочник:
- A (id)
- A_Component(id, a_id)
И произвольная выборка из этого справочника:
- B (id, a_id)
- B_component(id, b_id, ac_id)
Очевидно, что эта структура замыкается в ромб, где средствами базы не обеспечивается целостность данных - ничто не заставляет поля B.a_id и A_Component.a_id совпадать, а хотелось бы.
Ещё раз: необходимо, чтобы B_C.b_id и B_C.ac_id указывали на одну и ту же сущность A.
Вижу пару возможных решений:
- исключить таблицу
B, тем самым разорвав ромб зависимостей.
решение не подходит, потому что вBесть ещё данные, относящиеся ко всей выборке целиком - набор триггеров/ограничений, которые будут валидировать корректность данных в создаваемом
B_Component.
этот метод порождает пару запросов в базу для валидации.
Существует ли более каноничный/элегантный способ для подобной структуры?
