2009-11-12 80 views
1

設置:
一個表名爲documents,列author_idreviewer_id(等等)。
一個表格名爲users,列號爲user_idAccess 2007一對二列參照完整性

我需要創建兩個參照完整性鏈接:
一個一對多user_idauthor_id之間。
user_idreviewer_id之間爲一對多。

換句話說,documents中的這兩列是相互獨立的,但兩者的值都應該是有效的user_id

添加這些關係中的任何一個都可以。當我嘗試在Edit Relationships窗口中添加第二個關係時,Access會提示以下消息:

Microsoft Office Access無法強制執行此關係的參照完整性。

我已經搜索,但找不到任何解決方案。關於如何配置這種關係的任何想法?

+0

user_id是在用戶的主鍵? – JeffO 2009-11-12 19:40:29

+0

我創造了你有什麼上面,也沒有問題,有沒有什麼細節丟失? – Gratzy 2009-11-12 19:42:53

+0

不要忘了CHECK約束或表有效性規則,以確保AUTHOR_ID <> reviewer_id;) – onedaywhen 2009-11-13 08:37:41

回答

6

要將一個表中的兩個單獨關係添加到另一個表中的兩個不同字段,您需要在關係窗口中擁有多個父表的實例。

因此,您需要將用戶和文檔表添加到關係窗口並創建第一個關係。然後再次將用戶表添加到關係窗口(它將被別名爲Users_1),然後從該別名副本添加第二個關係。

這與您在QBE中定義兩個這樣的連接的方式完全一致,所以我會說這完全沒有問題。但它不一定明顯!

+0

+1 - 不知道是什麼Gratzy想出的評論。 – JeffO 2009-11-12 22:06:11

+0

我明白這是如何工作的,謝謝!一個快速的跟蹤問題 - 在什麼情況下你會在「編輯關係」窗口中使用多行? – vknlksr 2009-11-12 23:02:11

+0

+1有關Access UI工具:) – onedaywhen 2009-11-13 08:39:32

1

這不是直接回答你的問題,但如果我是你,我會用另一種數據模型,通過創建第三個表來實現DocumentsUsers之間的複雜許多一對多的關係稱爲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場將舉行關係類型,即「用戶」,「審閱」等。通過使用這種模式下,你可以有,對同一本書,多個用戶和/或多個審稿人,這可能更接近現實。您甚至可以有其他關係類型,如「作者」等。

0

首先,我建議您將您的專欄名稱分別更改爲author_user_idreviewer_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約束(或表[原文]驗證規則),以確保用戶無法例如檢討自己的工作

ALTER TABLE Documents ADD 
    CONSTRAINT document_author_cannot_review_their_own_work 
    CHECK (author_user_id <> reviewer_user_id) 
;