Ms access 规范化现有MS Access数据库
我有一个大型access数据库,需要将其规范化为五个表和一个查找表。我理解规范化背后的理论,并且已经勾勒出了表的外观,但是我不知道如何转换表以使数据库规范化。表格分析器没有提供我想要的细分 查询,特别是联合查询,能提供解决方案吗?您在哪里发现了问题?该数据库是一个非常典型的数据库,没有什么特别之处可以将其与其他数据库区分开来 数据库由一个表组成,其中包含: 公司名称、地址、电话等。 具有典型相关领域的联系人Ms access 规范化现有MS Access数据库,ms-access,normalizing,Ms Access,Normalizing,我有一个大型access数据库,需要将其规范化为五个表和一个查找表。我理解规范化背后的理论,并且已经勾勒出了表的外观,但是我不知道如何转换表以使数据库规范化。表格分析器没有提供我想要的细分 查询,特别是联合查询,能提供解决方案吗?您在哪里发现了问题?该数据库是一个非常典型的数据库,没有什么特别之处可以将其与其他数据库区分开来 数据库由一个表组成,其中包含: 公司名称、地址、电话等。 具有典型相关领域的联系人 这将基本上作为一个营销数据库,我将需要保持跟踪事件,商业信函等。我只是不知道如何保持关系
这将基本上作为一个营销数据库,我将需要保持跟踪事件,商业信函等。我只是不知道如何保持关系完整。你是说“关系”窗口中的关系吗?这些可以很容易地重建。还是说关键领域等?这有时很困难,可能涉及中间表。每种情况都不同。正如doofledorfer所说,如果发布模式,您可能会得到更具体的建议。如果您只有一个表,请在其中添加一个自动编号字段 然后创建其他表,并使用原始单个表中的“自动编号”值作为外键,将它们连接回原始数据 如果您有tblPerson:
tblPerson
LastName, FirstName, WorkPhone, HomePhone
您想将其分解,添加PersonID autonumber,然后创建一个电话表:
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;
有人建议使用联合查询,您必须将其保存,因为在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值,该值将所有派生记录绑定回原始表。从未考虑联合查询。在我分开表格后,我不知道保持关系完整所需的步骤。这是一个极好且详细的回答。但愿我能不止一次投赞成票@David W.Fenton:“在Jet SQL中不能将联合查询作为子选择”——不正确。在ANSI-92查询模式下使用Northwind尝试此操作:
选择DT1.digit FROM(选择DISTINCT 1作为订单中的数字联合选择DISTINCT 2作为订单中的数字)作为DT1代码>