我有一个大型访问数据库,需要将其规范化为五个表和一个查找表。我了解规范化背后的理论,并且已经勾勒出表格的外观,但我不知道如何转换表格以使数据库标准化。表格分析器不提供我想要的细分。
4 回答
如果您有一个表,请向其中添加一个自动编号字段。
然后创建其他表,并使用原始单个表中的自动编号值作为外键将它们连接回原始数据。
如果你有 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 值,它将所有派生记录绑定回原始表。
查询,尤其是联合查询,能否提供解决方案?你在哪里看到问题?
该数据库是一个非常典型的数据库,没有什么特别之处可以与其他数据库区分开来。
该数据库由一张表组成,其中:
公司名称、地址、电话等典型相关领域的联系人
这基本上将用作营销数据库,我将需要跟踪事件、业务通信等。我只是迷失在如何保持关系完好无损。
您是指关系窗口中的关系吗?这些可以很容易地重建。或者你的意思是关键领域等?这有时可能很困难,并且可能涉及中间表。每种情况都不同。正如 doofledorfer 所说,如果您发布模式,您可能会得到更具体的建议。