我有一个大型访问数据库,我需要将其规范化为五个表和一个查找表。我理解规范化背后的理论并且已经勾勒出了表格的外观,但我对如何转换表格以使数据库规范化感到迷茫。表分析仪不提供我想要的故障。
答案 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所说,如果您发布模式,您可能会获得更具体的建议。