【问题标题】:SQL/ACCESS one-sided one-to-one relationship data integritySQL/ACCESS 单向一对一关系数据完整性
【发布时间】:2021-07-16 01:58:43
【问题描述】:

我现在有一个包含两个表的数据库:

  • “用户”:包括从 CSV 加载的数据。
  • “帐户”:为特定用户开设的帐户。

两个表都有数字 ID 字段(“UserID”、“AccountID”),因为“Accounts”表还有一个名为“UserID”的字段,用于将这两个表链接在一起。

我希望连接这两个表,以确保只有在“用户”表中找到匹配的插入用户 ID 时,才能添加“帐户”中的新记录。起初对我来说,这听起来像是一对一的连接。但是,虽然不能有一个用户不在“用户”表中的帐户,但“用户”中的大多数记录仍然没有在“帐户”表中的帐户。

有没有办法在 ACCESS/SQL 中强制这种关系的数据完整性?

【问题讨论】:

  • 你用谷歌搜索过 MS Access 外键吗?
  • 是的,可以设置关系以强制关系完整性,因此帐户中的记录必须在用户中具有父记录。但是,为了防止一个用户有多个帐户,必须将帐户中的 UserID '外键'设置为主键。然后在用户中没有 AccountID。为什么这不是一张桌子?

标签: sql ms-access one-to-one data-integrity


【解决方案1】:

是的,您可以使用foreignKeys。在使用 UserID 作为 PrimaryKey 创建表 Users 后,当您使用 AccountsID 作为 primaryKey 创建表 Accounts 时,您必须将 UserID 添加为 foreignKey 并从 Users 表中引用 UserId

  FOREIGN KEY (userID) REFERENCES Users(UserID)

【讨论】:

  • 感谢您的评论。如果我理解正确 - 此外键确保我无法添加用户 ID 无效的帐户。但是,由于这两个字段都被索引,没有重复,我似乎无法让它工作,除了一对一,这又失败了。我希望允许选项在表之间进行链接,但也要确保在任何地方不超过一个 UsedID 或 AccountID。
  • 为什么一对一会失败?看来这就是你想要的。将两个 UserID 字段都设置为主键 - 这是一对一的关系。然后将 Accounts 中的 UserID 和 AccountID 设置为复合索引,以防止重复对。并且 AccountID 不应该在用户中。防止重复的帐号可能需要一些代码来验证。即使这是一张表(为什么不是?)也可能需要一些验证码。
  • @user8211163 好的,我为您创建了一个带有示例的数据库,您可以使用drive.google.com/drive/folders/… 这是下载链接。在此示例中,我创建了两个表用户,其中 userID 作为 PrimaryKey,Accounts 使用 AccountID 作为 PrimaryKey,另外我在 Accounts 中添加了一个名为 userID 的变量,这将是我的 foreignKey 而不是 Accounts 中的 primaryKey。最后,我在用户(用户 ID)和帐户(用户 ID)之间建立了关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多