MS Access中表之间的关系

Posted

技术标签:

【中文标题】MS Access中表之间的关系【英文标题】:Relationships Between Tables in MS Access 【发布时间】:2013-10-27 16:43:38 【问题描述】:

我完全是数据库新手,在 MS Access 2013 中设置 3 个表之间的关系时遇到了一些困难。

我的想法是我有一个包含帐户信息的表格,一个包含与此帐户相关的呼叫的表格,还有一个包含所有可能的呼叫响应的表格。我尝试了它们之间的不同组合,但没有任何效果。

第一个表 - 帐户:AccountID(PK) |账户名 |语言 |国家 |电子邮件 第二张表 - 调用:CallID(PK) |帐户 |回应 |评论 |日期 第 3 个表 - 响应:ResponseID(PK) |回应

【问题讨论】:

您能解释一下“关系”是什么意思吗?是否要在其他表中设置主键和外键? 我想我有FK和PK的想法(如果没有请纠正我),但我指的是不同领域之间的关系。例如:(1st table)AccountID-(2nd table)Account:一对多。 【参考方案1】:

当你有一个表时,它通常有一个主键字段,它是表的主索引。为了将它与其他表连接起来,您通常通过在其他表上设置外键来实现。

假设您有Accounts 表,它有AccountID 字段作为主键。该字段是唯一的(意味着该字段没有重复值)。

现在,您有另一个名为 Calls 的表,并且在那里有一个名为 AccountID 的外键字段,它指向 Accounts 表。

基本上你有 Accounts 和以下数据:

AccountID| AccountName | Language | Country | Email 

  1      | FirstName   | EN       | US      | some@email.com
  2      | SecondName  | EN       | US      | some@email.com

现在你有另一个表Calls很多调用

CallID(PK) | AccountID(FK) | ResponseID(FK) | Comment   | Date

  1        | 1             | 1              | a comment | 26/10
  2        | 1             | 1              | a comment | 26/10
  3        | 2             | 3              | a comment | 26/10
  4        | 2             | 3              | a comment | 26/10

您可以看到一对多关系:一个 accountID(在我的示例中为 AccountID=1)到多个调用(在我的示例中为 2 行,AccountID=1 作为外键,第 1 行和第 2 行)并且 AccountID=2 也2 行 Calls(第 3 行和第 4 行)

Responses 表也是如此

【讨论】:

太好了,它对我来说非常有用,但是当我尝试创建这种关系(在表 Accounts 和 Calls 之间)时,我收到错误消息“关系必须在相同数量的字段上数据类型”。我检查了这两种数据类型,它们是“数字”。另外,让我提一下 Calls 表目前是空的。最后一件事,如果我想在 Calls 表中输入一个帐户,而不是按数字,而是按帐户名称,我该怎么办。 calls中的字段为Long-Integer类型,Accounts中的PK字段为AutoNumber类型 谢谢leonid,我想我理解了这个概念,现在一切正常。我还面临着一件事。我想知道如何在“呼叫”表中输入新实体时,不使用 AccountID,而是使用帐户名称(原因:使用名称而不是数字更容易)并保持当前关系? 这取决于你做的SQL查询,如果你连接两个表(例如,要带上AccountID=1的所有数据,你也会得到表Calls的字段count。(只需在访问中寻找加入)【参考方案2】:

使用这个表结构:

Accounts : AccountID(PK) | AccountName | Language | Country | Email 
Calls    : CallID(PK) | AccountID(FK) | ResponseID(FK) | Comment | Date
Responses: ResponseID(PK) | Response
Accounts.AccountID 由 Calls.AccountID 引用。 1:n - 一个帐户可以进行多次调用,但每次调用只涉及一个帐户。 Responses.ResponseID 由 Calls.ResponseID 引用。 1:n - 许多调用可以从准备好的集合中获得相同的响应,但每个调用都得到其中一个。

【讨论】:

感谢帕莱克的回答和解释,+1。感谢你们,我处理好了,但现在我有了新的“要爬的山”。请查看我在 leonid 的回答下的评论以获取更多详细信息。提前致谢!【参考方案3】:

要真正定义 Access 中的关系,请打开“关系”窗口...

...然后按照此处的详细说明进行操作:

How to define relationships between tables in an Access database

【讨论】:

以上是关于MS Access中表之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 无法在实体和桥接表之间创建一对多关系

MS Access 数据库 (.mdb) 中表的审计跟踪

Access ODBC:不同数据库文件中表之间​​的JOIN

使用 C# 从 MS Access DB 中检索表关系

在access数据库中如何判断某个表是不是存在,若存在则删除它

MS Access 表单以更新多个表而无需子表单