Я бы определенно избежал моделирования типа «Таблица на иерархию» (т. Е. Когда вы встраиваете адрес непосредственно в компанию и сотрудника)
Значение Адреса нормализуются из ваших сущностей и хранятся отдельно (например, TPC)
Затем вы можете либо
- Добавить FK "OfficeAddressId" (не обнуляемый) и "MailingAddressId" (обнуляемый) в компанию и 3 x адресных FK лично, однако, в зависимости от ваших требованийдля «запроса адреса», поскольку существуют два разных объекта, ссылающихся на адреса, не очень легко определить, какой адрес принадлежит к какому объекту или к какому типу адресов вы обращаетесь, без необходимости «слепого» объединения в обаКомпания и человек.
ИЛИ, возможно, излишний, но еще более гибкая модель будет
Добавьте таблицу «многие: многие» «EntityAddress», связывающую либо компанию с адресом, либо персону с адресом, а затем добавьте классификационную таблицу «AddressType» (офис, почта, дом, работа и т. Д.).Хотя вам нужно будет ограничить типы адресов, добавляемых к этому множеству: многие с помощью бизнес-логики, это обеспечивает максимальную гибкость для будущего расширения адресов.
Посмотрите эти сообщения здесь и здесь для других идей о том, как решать проблемы.