规范化现有的MS Access数据库

时间:2008-11-10 00:20:04

标签: ms-access normalizing

我有一个大型访问数据库,我需要将其规范化为五个表和一个查找表。我理解规范化背后的理论并且已经勾勒出了表格的外观,但我对如何转换表格以使数据库规范化感到迷茫。表分析仪不提供我想要的故障。

4 个答案:

答案 0 :(得分:5)

如果您有一个表格,请为其添加一个自动编号字段。

然后创建其他表,并使用原始单个表中的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,那么你就可以用这个SQL附加qryPhones:

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

显然,这只是最简单的例子。你会为所有领域做同样的事情。关键是你必须为源表创建一个PK值,它将所有派生记录绑定回原始表。

答案 1 :(得分:0)

查询,尤其是Union查询,能否提供解决方案?你在哪里看到问题?

答案 2 :(得分:0)

数据库是一个非常典型的数据库,没有什么特别的可以将它与其他数据库区分开来。

数据库由一个表组成:

公司名称,地址,电话等 与典型相关领域的联系人

这基本上可以作为营销数据库,我需要跟踪事件,商业信函等。我只是迷失了如何保持关系的完整性。

答案 3 :(得分:0)

你的意思是关系窗口中的关系吗?这些可以很容易地重建。或者你的意思是关键领域等?这有时可能很困难,可能涉及中间表。每个案例都不同。正如doofledorfer所说,如果您发布模式,您可能会获得更具体的建议。