设定:
一个名为documents
的表格,其中列author_id
和reviewer_id
(以及其他)
一个名为users
的表格,列user_id
。
我需要创建两个参照完整性链接:
user_id
和author_id
之间的一对多。
user_id
和reviewer_id
之间的一对多。
换句话说,documents
中的这两列彼此独立,但两者都应具有有效user_id
的值。
添加其中任何一种关系都可以。当我尝试在Edit Relationships
窗口中添加第二个关系时,Access会抱怨以下消息:
Microsoft Office Access无法强制实施此关系的参照完整性。
我搜索过,但找不到任何解决方法。关于如何配置这种关系的任何想法?
答案 0 :(得分:6)
要将一个表中的两个单独关系添加到另一个表中的两个不同字段,您需要在关系窗口中拥有父表的多个实例。
因此,您需要将“用户和文档”表添加到关系窗口并创建第一个关系。然后将Users表第二次添加到关系窗口(它将别名为Users_1),然后从该别名副本添加第二个关系。
这与你在QBE中定义两个这样的连接的方式完全一致,所以我认为它根本没有问题。但它不一定显而易见!
答案 1 :(得分:1)
这不是您问题的直接答案,但如果我是您,我会使用其他数据模型通过创建第三个来实现Documents
和Users
之间复杂的多对多关系名为DocumentsUsers
的表格包含以下字段:
PK documentUser_id (*)
FK document_id
FK user_id
documentUser_type
(*) or you could alternatively use document_id + user_id as a PK...
documentUser_type字段将保存关系类型,即“用户”,“审阅者”等。通过使用此模型,您可以为同一本书提供多个用户和/或多个审阅者,这可能更接近于现实。您甚至可以使用其他关系类型,例如“作者”等。
答案 2 :(得分:0)
首先,我建议您将列的名称分别更改为author_user_id
和reviewer_user_id
,以明确每个引用user_id
。
其次,您应该知道使用Access的UI工具不是强制性的。我们中的许多人发现它们不直观,但幸福的是有其他选择。一种是使用SQL DDL,例如ANSI-92 Query Mode:
ALTER TABLE Documents ADD
CONSTRAINT fk__ document_author_user_id__Users
FOREIGN KEY (author_user_id)
REFERENCES Users (user_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
;
ALTER TABLE Documents ADD
CONSTRAINT fk__ reviewer_user_id__Users
FOREIGN KEY (reviewer_user_id)
REFERENCES Users (user_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
;
第三,考虑您可能需要CHECK
约束(或表格[sic]验证规则)以确保用户无法查看自己的工作,例如
ALTER TABLE Documents ADD
CONSTRAINT document_author_cannot_review_their_own_work
CHECK (author_user_id <> reviewer_user_id)
;