Вопрос проектирования и нормализации базы данных - PullRequest
0 голосов
/ 28 августа 2009

У меня есть огромный MDB-файл доступа, который содержит одну таблицу с 20-30 столбцами и более 50000 строк и у меня есть кое-что как это

столбцы:

id desc name phone email fax ab bc zxy sd country state zip .....
1  a     ab  12     fff   12  w 2  3   2    d     sd     233
2  d     ab  12     fff   12  s 2  3   1    d     sd     233

здесь у меня есть некоторые значения столбца, относящиеся к повторяющимся адресам, есть ли способ нормализовать приведенную выше таблицу, чтобы мы могли удалять дубликаты или повторяющиеся данные.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Вот быстрый ответ. Вам просто нужно переместить поля адреса в новую таблицу (удалить дубликаты) и добавить FK обратно в основную таблицу.

Таблица 1 (Люди или что-то еще)

id desc name phone email fax  ab  bc  zxy  sd   address_id 
1  a     ab  12     fff   12   w  2   3    2    1
2  d     ab  12     fff   12   s  2   3    1    2
3  d     ab  12     fff   12   s  2   3    1    2
4  d     ab  12     fff   12   s  2   3    1    1

Таблица 2 (Адрес)

address_id country state  zip .....
1          d       sd     233
2          e       ac     123
1 голос
/ 28 августа 2009

У Джима 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 с этим значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...