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