Прежде чем идти дальше: если вы определитесь с дизайном для хранения банковских реквизитов, в котором отсутствует ссылочная целостность, пожалуйста, скажите мне, кто будет его использовать, чтобы я никогда не мог иметь с ними дело.Это так важно.Ограничения в логике вашего приложения могут соблюдаться ;случаются события, исключения, прерывания, несоответствия, которые впоследствии отражаются в данных, потому что нет значимых гарантий.Ограничения в вашей схеме должны соблюдаться .Гораздо безопаснее, и банковские данные - это то, с чем можно быть максимально безопасным.
Вы правы в определении # 1 как неоптимального;учетная запись - это учетная запись, независимо от того, кому она принадлежит.№ 2 отсутствует, потому что ссылочная целостность не подлежит обсуждению.№ 3, строго говоря, самый жизнеспособный подход, хотя, если вы знаете , вам никогда не придется беспокоиться о расширении числа организаций, которые могут иметь банковские реквизиты, вы можете обойтись без # 4и ограничение CHECK
, чтобы каждая строка имела значение только для один из четырех внешних ключей - но вы используете MySQL, который игнорирует ограничения CHECK
, поэтому перейдите к # 3.
Индексируйте ваши внешние ключи и производительность будет в порядке.Представления хороши, чтобы избежать шаблонного JOIN
s, если у вас есть необходимость сделать это.