2013-02-05 222 views
0

我有3個表格,章節,子章節和分部。這些表中的每一個都有我想存儲在名爲「Sections」的表中的附加記錄。他們都是一對多的關係。
我的問題是在這裏建立交叉引用的最佳方法是什麼?這是我目前有:交叉引用表

Chapter table: 
    chapterID int 
    partID int 
    chapterNumber varchar 
    chapterName varchar 
SubChapter table: 
    subChapterID int 
    chapterID int 
    subChapterNumber varchar 
    subChapterName varchar 
Division Table: 
    divisionID int 
    subChapterID int 
    divisionNumber varchar 
    divisionName varchar 

Section Table: 
    sectionID int 
    parentID int 
    parentType int (1 = chapter; 2 = subchapter; 3 = division) 
    sectionNumber varchar 
    sectionName varchar 

我遇到的問題是FK限制。我應該刪除外鍵嗎?如果我做了或者甚至會擔心,我能做些什麼來提高效率?

對於那些想知道的,我的要求是在數據庫中可以訪問州和聯邦管理代碼的某些方面,以填充Intranet網頁上的下拉菜單。

+1

爲什麼不只是添加一個字段'sectionType'(作爲章節,子章,部門或部分)到部分表中並將所有內容放入該表中? –

+0

我必須更多地考慮整體的答案,但我不會廢除FK。這就是擁有關係數據庫的意義。 – Matt

+0

Matt:外鍵不是關係數據庫的重點,表和關係是關鍵。而FK's不是*關係,它們只是實際實施關係強制執行的一種方式,這是非常非常不同的事情。 – RBarryYoung

回答

0

就個人而言,我會爲每個父類型創建一個節表,然後您的外鍵將正常工作。然後,我會創建一個視圖,加入所有聯合,以減輕加入這六個表的重複性。

我當然可以欣賞你現在的設計,但讓FKs可以很好地防止孤立的數據。另一種方法是將刪除觸發器添加到章節,子章節和分部中,以便在存在相應的章節記錄時避開刪除操作。

+0

這是我原來的想法。到目前爲止,在我需要的管理代碼中,沒有一個格式相同。有一次,路易斯安那州按照你的想法將我擁有的3張桌子變成8張桌子。 我在找什麼是使用外鍵的替代方法。我對數據庫設計沒有經驗,但是爲了引用程序中的表,像這樣的設計似乎很容易。如果有幫助,這是靜態數據,如果它發生變化,每年只會更新一次。 – jkmurphy1