Вы правы, когда говорите "это зависит".В зависимости от того, какие ваши данные будут использоваться для OLTP, вы будете рассматривать нормализованный дизайн и систему отчетности, для которой вы хотите, чтобы данные были нормализованы с помощью контактной информации, встроенной в другие компоненты данных.
Внормализованная база данных, уровень нормализации также можно обсудить.Некоторые скажут, что контактная информация должна быть гранулированной, как в первом сценарии.Мне нравится идти «в середине пути». Я бы имел все контактные данные в одной таблице, включая адрес, телефон и электронную почту.
Contact
ID, Address, Address2, City, State, Zip, Phone, Email
Затем создайте связь с отдельной таблицей
CompanyContact
ID, CompanyID, ContactID
Это также можно интегрировать в таблицу компании, просто добавив ContactID
в таблицу Company и избегая отдельных отношений и объединения.
Вы также можете реализовать таблицу с ContactTypes
.
ContactType
ID, ContactType
1, Company
2, Charity
3, Auditor
....
Затем вы можете указать это в таблице CompanyContact
и устранить необходимость в связи.Хотя он соответствует вашему сценарию с 1 контактом на тип, он не оставляет места для роста.