【问题标题】:MS Access Database Design Issue (One-to-Many vs. Many-to-Many Relationships)MS Access 数据库设计问题(一对多与多对多关系)
【发布时间】:2016-02-24 05:07:42
【问题描述】:

我目前有一个由三个表组成的 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 表中的主键alert_id 连接到email 和@987654328 中的非主键alert_id 字段@表。

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

我有一个输入表单,允许一次将一个alert_id、一个email_address 和一个phone_number 输入数据库。我还有另一个输入表单,它使用子表单允许输入单个 alert_id 以及多个输入到 email_addressphone_number 字段。

我遇到的问题是,我需要在一天输入带有特定 alert_idemail_addressphone_number 数据,然后在第二天输入更多电子邮件和具有相同alert_id 的电话数据。表关系当前的结构方式(alert_id 作为主键)在尝试将现有的 alert_id 输入到表单字段时遇到了困难。

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

任何建议将不胜感激!

【问题讨论】:

    标签: ms-access relational-database


    【解决方案1】:

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

    相反,使用一个组合框,其控制源与您的表alert 相同,并让用户选择他们将添加电子邮件地址或电话号码的alert_ID

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

    我认为您的表格的结构方式没有任何问题,但这是假设用户知道如何在没有名称或描述字段的情况下解释 alert_ID。错误是由于您的表单的构建方式,而不是数据库的底层结构。

    【讨论】:

    • 感谢您的回复。我应该在 OP 中提到这一点,但 alert_id 值不是由数据库生成的,它们与其他值一起接收并输入到数据库中。而且,由于我需要将alert_id 值与其他email_addressphone_number 值链接,所以我认为这三个值都需要在表单上。此外,这里涉及的规模(我将添加到已完成数据库中的当前数据表包含大约 10K 行)使我不愿意使用组合框。有什么想法吗?
    • @Psychonaut418 所以alert.alert_id 字段是在使用参照完整性将新的email.alert_id 添加到email 表(与phone 相同)时生成的?是否有任何代码正在运行以将记录添加到alert 表?另外,用户如何知道他们需要向哪个alert_id 添加更多联系人?
    • 不,现在我已经设置了表单,以便表单与alert.alert_id 字段相关联,参照完整性相应地更新email.alert_id 和/或phone.alert_id 字段。输入数据的用户会收到一封外部电子邮件,其中包含需要添加到数据库中的alert_idemail_addressphone_number,然后将使用表单输入这些内容。如果他们向现有的alert_id 添加新的电子邮件或电话号码,那是因为他们在标有旧alert_id 的外部电子邮件中收到了新的电子邮件/电话数据。
    • @Psychonaut418 我明白了,我认为如果您的表单绑定到 alert 表,则除非用户能够知道,否则将无法将新联系人添加到现有 alert_id alert_id 是否已经存在,如果存在,请在添加新联系人之前导航到表单上的该记录(如果表单属性“数据条目”设置为“是”,则不可能)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2013-11-20
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多