Предположим, у меня есть две таблицы: «Клиент» и «Поставщик». Я хочу иметь общую адресную таблицу для адресов клиентов и поставщиков. У клиентов и поставщиков может быть от одного до нескольких адресов.
Опция 1
Добавьте столбцы для AddressID в таблицы Customer
и Vendor
. Мне это не кажется чистым решением.
Customer Vendor Address
-------- --------- ---------
CustomerID VendorID AddressID
AddressID1 AddressID1 Street
AddressID2 AddressID2 City...
Вариант 2
Переместите внешний ключ в таблицу Address
. Для клиента будет заполнено Address.CustomerID
. Для Продавца будет заполнено Address.VendorID
. Мне это тоже не нравится - мне не нужно изменять таблицу адресов каждый раз, когда я хочу использовать ее для другого объекта.
Customer Vendor Address
-------- --------- ---------
CustomerID VendorID AddressID
CustomerID
VendorID
Вариант 3
Я также видел это - только 1 столбец внешнего ключа в таблице адресов с другим столбцом, чтобы определить, к какой таблице внешних ключей принадлежит адрес. Мне этот не нравится, потому что он требует, чтобы все таблицы внешних ключей имели одинаковый тип идентификатора. Это также кажется беспорядочным, когда вы начинаете кодировать против него.
Customer Vendor Address
-------- --------- ---------
CustomerID VendorID AddressID
FKTable
FKID
Итак, я слишком разборчив или есть что-то, о чем я не подумал?