我有一个大型访问数据库,我需要将其规范化为五个表和一个查找表.我理解规范化背后的理论并且已经勾勒出了表格的外观,但我对如何转换表格以使数据库规范化感到迷茫.表分析仪不提供我想要的故障.
如果您有一个表,请为其添加一个自动编号字段.
然后创建其他表,并使用原始单个表中的Autonumber值作为外键将它们连接回原始数据.
如果你有tblPerson:
tblPerson
LastName, FirstName, WorkPhone, HomePhone
Run Code Online (Sandbox Code Playgroud)
并且您想要将其分解,添加PersonID自动编号,然后创建一个电话表:
tblPhone
PhoneID, PersonID, PhoneNumber, Type
Run Code Online (Sandbox Code Playgroud)
然后,您将从tblPerson中添加适当字段的数据:
INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
SELECT tblPerson.PersonID, tblPerson.WorkPhone, "Work"
FROM tblPerson
WHERE tblPerson.WorkPhone Is Not Null;
Run Code Online (Sandbox Code Playgroud)
然后你会为家庭电话运行另一个查询:
INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
SELECT tblPerson.PersonID, tblPerson.HomePhone, "Home"
FROM tblPerson
WHERE tblPerson.HomePhone Is Not Null;
Run Code Online (Sandbox Code Playgroud)
有人建议使用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;
Run Code Online (Sandbox Code Playgroud)
如果你将其保存为qryPhones,那么你将使用此SQL附加qryPhones:
INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
SELECT qryPhones.PersonID, qryPhones.WorkPhone, qryPhones.Type
FROM qryPhones;
Run Code Online (Sandbox Code Playgroud)
显然,这只是最简单的例子.你会为所有领域做同样的事情.关键是你必须为源表创建一个PK值,它将所有派生记录绑定回原始表.
| 归档时间: |
|
| 查看次数: |
5595 次 |
| 最近记录: |