У меня есть следующие модели (упрощено, если пропустить все остальные поля с акцентом на идентификаторы первичного ключа):
[invoice]
invoice_id
customer_id
invoice_description
[customer]
customer_id
company_id
customer_name
[company]
company_id
company_name
[strategy]
strategy_id
strategy_descripton
Компания имеет много клиентов, которые, в свою очередь, могут иметь много счетов, принадлежащих этому клиенту.
Хотя это и не показано выше, я также хотел бы иметь список стратегий, которые принадлежат компании (и только одной компании).
Мне бы хотелось, чтобы клиент, счет и компания могли определить «стратегию по умолчанию», которая ссылается на стратегию компании, к которой они принадлежат.
Я знаю, что мог бы добавить дополнительное поле FK с именем Strategy_id в каждую таблицу (счет-фактура, клиент и компания), но как я могу гарантировать, что в случае внесения изменений (кто-то пытается перенести стратегию в другую компанию), мы не в конечном итоге счет или клиент указывает на стратегию, которая входит в список стратегий другой компании?
Как бы я справился с этим - нужно ли мне проверять все это в бизнес-логике или использовать проверочные ограничения, или это можно сделать с помощью редизайна таблицы и внешних ключей?
Большое спасибо заранее,
Chris