Мне интересно, хороший ли это дизайн. У меня есть несколько таблиц, которые требуют адресной информации (например, улица, почтовый индекс/почтовый индекс, страна, факс, электронная почта). Иногда один и тот же адрес повторяется несколько раз. Например, адрес может храниться у поставщика, а затем по каждому заказу на поставку, отправленному им. Затем поставщик может изменить свой адрес, и любые последующие заказы на поставку должны иметь новый адрес. Это сложнее, чем это, но это примерное требование.
Вариант 1 Поместите все столбцы адресов в качестве атрибутов в различные таблицы. Скопируйте детали вниз от поставщика к ПО по мере его создания. Потенциально хранить несколько копий
Вариант 2 Создайте отдельную таблицу адресов. Имейте внешний ключ от поставщика и таблицы заказов на поставку в адресную таблицу. Только разрешить вставку и удаление в таблице адресов, поскольку обновления могут измениться больше, чем вы планируете. Тогда у меня будет какая-то запланированная задача, которая удалит любые строки из таблицы адресов, на которые больше не ссылаются ни на что, так что неиспользуемые строки не остались. Возможно, также есть уникальное ограничение для всех столбцов non-pk в таблице адресов, чтобы остановить дубликаты.
Я склоняюсь к варианту 2. Есть ли лучший способ?
EDIT: я должен сохранить адрес в заказе на поставку, как это было при отправке. Кроме того, это немного сложнее, чем я предложил, поскольку там могут быть адрес доставки и адрес выставления счетов (там также есть множество других таблиц, которые имеют адресную информацию).
Через некоторое время я удалю старые заказы на поставку в соответствии с их датой. Именно после этого я собирался на мусор, собирающий любые записи адресов, которые больше не ссылаются ни на что (в противном случае я чувствую, что создаю утечку).