Нормализация существующей базы данных MS Access

У меня есть одна большая база данных доступа, которую мне нужно нормализовать на пять таблиц и таблицу поиска. Я понимаю теорию, лежащую в основе нормализации, и уже набросал внешний вид таблиц, но я заблудился о том, как преобразовать мою таблицу, чтобы нормализовать базу данных. Анализаторы таблиц не дают той разбивки, которую я хочу.

4 ответа

Если у вас есть одна таблица, добавьте в нее поле Autonumber.

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

Если у вас был tblPerson:

  tblPerson
  LastName, FirstName, WorkPhone, HomePhone

и вы хотите разбить его, добавить автонумера PersonID и затем создать таблицу телефона:

  tblPhone
  PhoneID, PersonID, PhoneNumber, Type

Затем вы добавите данные из tblPerson для соответствующих полей:

  INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
  SELECT tblPerson.PersonID, tblPerson.WorkPhone, "Work"
  FROM tblPerson
  WHERE tblPerson.WorkPhone Is Not Null;

и затем вы запустите другой запрос для домашнего телефона:

  INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
  SELECT tblPerson.PersonID, tblPerson.HomePhone, "Home"
  FROM tblPerson
  WHERE tblPerson.HomePhone Is Not Null;

Кто-то предложил запрос UNION, который вам нужно сохранить, поскольку у вас не может быть запроса UNION в качестве подвыбора в Jet SQL. Сохраненный запрос будет выглядеть примерно так:

  SELECT tblPerson.PersonID, tblPerson.WorkPhone, "Work" As Type
  FROM tblPerson
  WHERE tblPerson.WorkPhone Is Not Null
  UNION ALL 
  SELECT tblPerson.PersonID, tblPerson.HomePhone, "Home" As Type
  FROM tblPerson
  WHERE tblPerson.HomePhone Is Not Null;

Если вы сохранили это как qryPhones, вы добавили бы qryPhones с этим SQL:

  INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
  SELECT qryPhones.PersonID, qryPhones.WorkPhone, qryPhones.Type
  FROM qryPhones;

Очевидно, это просто самый простой пример. Вы бы сделали то же самое для всех полей. Ключ заключается в том, что вам нужно создать значение PK для исходной таблицы, которое свяжет все производные записи с исходной таблицей.

Могут ли запросы, в частности запросы Union, предложить решение? Где вы видите проблему?

Вы имеете в виду отношения в окне отношений? Они могут быть легко восстановлены. Или вы имеете в виду ключевые поля и т.д.? Иногда это может быть сложно и может включать промежуточные таблицы. Каждый случай индивидуален. Как сказал doofledorfer, вы, вероятно, получите более конкретный совет, если разместите схемы.

База данных является довольно типичной базой данных, в которой нет ничего особенного, чтобы отличить ее от других.

База данных состоит из одной таблицы с:

название компании, адрес, телефон и т. д. контактное лицо с типичными смежными полями

Это будет в основном служить базой данных маркетинга, и мне нужно будет отслеживать события, деловую переписку и тому подобное. Я просто заблудился о том, как сохранить отношения в целости и сохранности.

Другие вопросы по тегам