Нормализация существующей базы данных MS Access - PullRequest
2 голосов
/ 10 ноября 2008

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

Ответы [ 4 ]

5 голосов
/ 10 ноября 2008

Если у вас есть одна таблица, добавьте в нее поле 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 для исходной таблицы, которое свяжет все производные записи с исходной таблицей.

0 голосов
/ 10 ноября 2008

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

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

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

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

0 голосов
/ 10 ноября 2008

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

0 голосов
/ 10 ноября 2008

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

...