У Джима W хорошее начало, но, чтобы еще больше нормализоваться, выделите ваши избыточные элементы адреса в отдельные таблицы.
Создайте таблицы, для которых повторяются адресные данные (Страна, Штат и т. Д.). Получив таблицы данных, вы захотите добавить столбцы, такие как StateID, CountryID и т. Д., В таблицу адресов.
Теперь у вас есть варианты для исправления существующих данных. Вы можете быть быстрыми и грязными и использовать операторы Update, чтобы установить все вновь созданные поля идентификаторов так, чтобы они указывали на правильную таблицу данных.
UPDATE Addresses SET StateID=1 WHERE STATE='AL'
Вы можете сделать это довольно быстро, как пакетный файл .sql, но я бы порекомендовал более программное решение, которое просматривает таблицу адресов и пытается сопоставить текущее состояние с записью в новой таблице состояний. Если найдено, StateID в таблице адресов обновляется идентификатором из соответствующей строки в States.
Затем вы можете удалить старое поле State из таблицы адресов, поскольку теперь оно хорошо и аккуратно нормализовано в отдельной таблице States.
Этот процесс может быть повторен для всех избыточных элементов данных. Однако нормализацию базы данных IMO можно зайти слишком далеко. Например, если у вас есть часто используемый запрос, для выполнения которого после нормализации требуется 10 объединений, вы можете увидеть снижение производительности. Похоже, это не так, потому что я думаю, что вы на правильном пути.
Из комментария выше:
@Lance Я хотел что-то похожее на это, но вот проблема, у меня есть необработанные данные, поступающие в виде одной таблицы, и мне нужно уточнить и отправить их в две таблицы, я могу добавить адрес в таблице 2, но я не знаю, как бы вы вставить address_id в таблице 1
Вы можете получить вновь созданный идентификатор из таблицы адресов, используя @@ IDENTITY, и обновить address_ID с этим значением.