Database-Design
兩個表之間的許多一對多關係
在使用 Access 2013 為治療性寄宿學校創建小型數據庫的過程中,我在設計關係數據庫模型時遇到了問題。
至少有兩次,我遇到了兩個表之間存在許多一對多關係的情況。
- 父母和孩子之間有兩種一對多的關係,因為 a) 一些父母在學校有不止一個孩子;b) 父親和母親經常有不同的地址,我們必須分別聯繫他們。
- 員工和孩子之間存在三種(實際上甚至更多)一對多的關係,因為 a)每個孩子都有一個參考教育者(Ref_Educ);b) 每個孩子在董事會中都有一個推薦人(Ref_Dir);c) 每個孩子都有一個“教父”(Ref_Godf)。但這些規則是軟的。有時,參考人Ref_Dir不是董事會成員。有時,參考的教育者也是孩子的“教父”,等等。
所以在我看來,在這些表之間設置許多一對多關係的想法有點合乎邏輯,但另一方面:
- 我無法在 Access 的“關係”視窗中輕鬆設置它們,這讓我擔心我的關係設計不當。
- 在這個類似的問題中,有人建議“修復數據庫設計”。(但是,我認為我的問題實際上是不同的,因為Staff表中的給定人員可以多次連結到同一個Children條目。)
你能給我一些建議嗎?提前致謝。
編輯 2014-06-26 我遵循了您的建議並更新了架構,如下所示:
如您所見,我添加了連接表和查找表以保持狀態的一致性。
對於我們將來想要添加一些功能的情況,它肯定更有意義,並且限制更少。
但另一方面,它是否與現在有有限數量的狀態(父親/母親,ref_educ/ref_dir/ref_godf)相一致,這些狀態是要在我們的“Cartotheque”形式中單獨硬編碼的?
為了讓事情更清楚,我繪製了一個模型預覽它的外觀:
它是“兒童”表中的一對多;一個孩子對許多員工,一個孩子對一個或多個“負責任的成年人”(可能是任何家庭關係)。如果您將父親和母親欄位更改為責任 1、責任 2 並將責任 1 關係、責任 2 關係添加到“兒童”,您將解決該問題。或者,您可以僅使用 childID、ResponsibleID 和關係(每個子 ID 1 個或多個記錄)創建連接或連結表。您將需要一個“FamRelationship”查找表,以確保您的數據輸入保持一致(可能是父母、阿姨、祖父母、監護人等)。這樣,孩子喬可以有父母邁克和瑪麗,而他的表弟孩子簡可以有邁克叔叔和瑪麗阿姨。兩個孩子的記錄都將引用相同的 2 你目前所說的“
如果“員工”成員不是董事會成員,並且需要注意這一點,請在“員工”中添加一個 tinyint 指示符(真/假,1/0)。