如何在MS Access中建立Players与Goals表的指定关联并解决关系已存在提示?
解决Access中关联Players主键到Goals多个外键的关系已存在问题
首先,我得帮你理清这个问题的来龙去脉:你想让Players表的id_player(主键)分别关联Goals表的player_score和player_assist两个字段,这个需求本身是完全符合数据库关系逻辑的(一个球员可以对应多条进球、多条助攻记录),但Access提示“The relationship already exist”,大概率是已存在其中一条关联,或者关系窗口有缓存残留,下面是具体的解决步骤,以及对你方案正确性的确认:
一、可行的解决步骤
1. 先清理现有关联关系
- 打开Access的数据库工具选项卡,点击「关系」按钮打开关系窗口
- 在窗口中找到
Players和Goals之间已有的关系连线(如果有的话),右键选择「删除」,确认删除操作(放心,这只会删除关系定义,不会删除任何表数据) - 关闭关系窗口,记得保存当前的关系更改
2. 重新建立两个独立的关联
- 再次打开关系窗口,确保
Players和Goals表都已添加到窗口中 - 拖动
Players表的id_player字段,到Goals表的player_score字段上,弹出关系设置对话框 - 根据需求勾选实施参照完整性(如果需要限制外键只能引用存在的球员ID),点击「创建」完成第一个关联
- 重复上述拖动操作:把
Players的id_player拖到Goals的player_assist字段,同样设置参照完整性后点击「创建」 - 这时候你会看到关系窗口里有两条从
Players到Goals的连线,分别对应两个外键关联,不会再出现“关系已存在”的提示
二、为什么会出现这个提示?
- 最常见的原因是你之前已经建立了
id_player和其中一个外键(比如player_score)的关系,再次尝试建立时误操作重复选择了已有的关联对 - 少数情况是Access的关系窗口缓存了旧的关系定义,关闭再重新打开窗口就能解决
三、你的方案正确性确认
你的核心需求(用Players的主键关联Goals的两个外键字段)是完全正确的!这是典型的一对多关系扩展:一个球员(主键)可以对应多条进球记录(player_score),也可以对应多条助攻记录(player_assist),分别建立两个独立的关联完全符合数据库设计规范。
如果你的截图显示关系窗口中已有一条Players到Goals的连线,或者提示弹窗直接指向已存在的关联,那按照上面的步骤清理后重建就可以解决问题。
内容的提问来源于stack exchange,提问作者Radim




