MS Access数据库设计问题(一对多与多对多关系)

时间:2016-02-23 19:21:15

标签: ms-access relational-database

我目前有一个由三个表组成的Access 2013数据库,在三个单独的表中包含以下字符串字段:

警报

alert_id (primary key)

电子邮件

ID (primary key),
alert_id,
email_address,
date_added

电话

ID (primary key),
alert_id,
phone_number,
date_added

我目前将关系定义为一对多关系,从alert_id表中的主键alert连接到两个中的非主键alert_id字段emailphone表。

我将输入此表的数据通常包含一个警报ID,该ID与多个电子邮件地址和/或电话号码相关联。我会在一天之内分几批收到新信息,并相应地输入。

我有一个输入表单,允许一次将alert_id,一个email_address和一个phone_number输入数据库。我还有另一个输入表单,使用子表单,允许在alert_idemail_address字段中输入单个phone_number以及多个条目。

我遇到的问题是,我经常需要在一天内输入email_addressphone_number个特定alert_id的数据,然后第二天使用相同的alert_id输入更多电子邮件和电话数据。表关系当前的结构方式,alert_id是主键,我在尝试将现有alert_id输入表单字段时会遇到困难。

有没有办法对表单进行编码,这样就不会出现问题?我认为当前的结构已经正确规范化了,问题更多的是我正在做的形式。但是,如果数据库的结构不适合使用,我也愿意改变它。

非常感谢任何建议!

1 个答案:

答案 0 :(得分:0)

您应该从表单中删除alert.alert_ID。用户不应该直接指定此字段,并且就像您已经布置的那样,这会导致问题。

相反,请使用控制源等于您的表alert的组合框,并让用户选择将alert_ID添加电子邮件地址或电话号码。

如果这是您的组合框中尚未指定的全新alert_ID,请在其旁边添加一个命令按钮,该按钮将在您的alert_ID表格中创建新的alert。还可以使用命令按钮重新查询组合框,以便立即显示新创建的alert_ID(甚至让宏为它们选择新的alert_ID)。这应该可以防止主键中重复值的错误。

我没有看到表的结构方式存在任何问题,但这假设用户将知道如何在没有名称或说明字段的情况下解释alert_ID。错误是由于构造表单的方式,而不是数据库的底层结构。