(Это то, что сказал @AJC, только что объяснил.)
Решение 1 потенциально позволяет назначить один и тот же адрес максимум трем объектам разных видов. Если последнее не является именно вашим намерением, избегайте этого решения.
Решение 2 позволяет потенциально назначать адрес типа «B» Клиенту и т. Д. Возможно, это также не то, что вам нужно.
Насколько я понимаю ваше намерение, вы должны иметь возможность назначать несколько адресов сущности, но не наоборот.
Создание таблицы адресов для вида объекта: CustomerAddress
с FK, ссылающимся на Customer
, VendorAddress
с FK на Vendor
и т. Д. Кроме строгой ссылочной целостности и невозможности назначить адрес неправильного типа, это покупает Вы можете расширять каждый тип адреса дополнительными полями, которые имеют для него смысл.
Чтобы упростить запрос ко всем адресам, вы можете создать представление Address
, которое будет включать общие поля и флаг типа ('B', 'C', 'V'), чтобы увидеть, что это за адрес.