我有一个大型访问数据库,我需要将其规范化为五个表和一个查找表.我理解规范化背后的理论并且已经勾勒出了表格的外观,但我对如何转换表格以使数据库规范化感到迷茫.表分析仪不提供我想要的故障.
如果您有一个表,请为其添加一个自动编号字段.
然后创建其他表,并使用原始单个表中的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值,它将所有派生记录绑定回原始表.