3

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

4

4 回答 4

6

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

然后创建其他表,并使用原始单个表中的自动编号值作为外键将它们连接回原始数据。

如果你有 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 值,它将所有派生记录绑定回原始表。

于 2008-11-10T02:50:03.467 回答
0

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

于 2008-11-10T00:23:03.373 回答
0

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

该数据库由一张表组成,其中:

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

这基本上将用作营销数据库,我将需要跟踪事件、业务通信等。我只是迷失在如何保持关系完好无损。

于 2008-11-10T00:50:24.503 回答
0

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

于 2008-11-10T01:02:57.973 回答