当外部程序将多条记录写入一条记录时,如何规范化数据?

时间:2017-04-18 12:45:34

标签: sql ms-access ms-access-2010 ms-office

我正在使用写入Access的外部程序。该程序从电子表单中收集数据,并将提交表单中的所有数据写入Access数据库。但是,出现问题并导致许多问题并减慢数据库速度的问题是,当它写入我的数据库时,数据未正常化。

表单看起来像这样

Name: John Doe
DOb: April 1 1950
SIN: 123456789
Marital Status: Married
Phone: 123456789
Email: john@email.com

然后它使用Question作为字段名称并将输入的数据作为数据,将表单上的所有内容写为一条记录。像这样:

Name    | DOB          |  SIN     | Marital_Status | Phone    | Email
John Doe| April 11 1950| 123456789| Married      | 123456789| john@email.com

这里的示例表单看起来不是什么问题,但是,我们有大约100个问题的表单,最后我们得到一个包含以下字段的表:

Name|Date|Weather|Question1|Question2|Question3|Question4|...|Question100

....等等。

作为一个菜鸟,到目前为止我所做的是使用union sql查询来操作数据,使其显示为:

Name|Date|Weather|Question1
Name|Date|Weather|Question2
Name|Date|Weather|Question3
Name|Date|Weather|QuestionN

我已经能够解决这个问题,但它严重减慢了我的数据库,现在我遇到了其他问题。

当外部程序写入这样的数据时,如何规范化这些数据?我无法操纵程序如何写入我的Access数据库。

2 个答案:

答案 0 :(得分:3)

Access 2010有一个名为event-driven data macros的功能,与其他数据库系统中的触发器类似。我个人没有任何使用它们的经验,但看起来你应该能够创建一个 After Insert 宏,它将在插入新行时运行。在该宏中,您可以将问题分开并将它们插入到更加规范化的表格中(然后您可以用它来报告)。

答案 1 :(得分:1)

你正确地做了,联合查询确实是规范化非规范化表的正确方法。但是,除了非规范化之外,还应考虑将其归一化,这样您就可以实际处理数据,而无需每次要访问数据时Access执行100次查询。并考虑将名称|日期|天气拆分为不同的表格,因为每个问题要重复100次。

只需执行SELECT * INTO MyTable From UnionQuery即可将联合查询结果存储在表中。将其他程序的导入与宏中的此查询相结合。

显然,这并不理想。理想的解决方法是操纵外部程序,使其不首先对数据进行非规范化