2010-02-03 100 views
2

我很慚愧地問這個問題,但最近出現了一種情況,那就是我需要爲三種不同類型的銀行實體創建單個表格,這三種不同類型的銀行實體彼此相關。讓我解釋。數據庫表中的循環引用

想象一張銀行表格,其中包含一個管理銀行或經營農村分行的正常銀行的詳細信息,或者在本行或零售銀行分行下經營的農村分行,這些分行不屬於此分層結構,但僅與農村分支。

此前,我決定爲這些人制定4個不同的表格,這些表格受到FK限制(即指導行,農業分行,農村分行和零售銀行分行)。但是,當我開始創建TRANSACTION表時,我感到困惑,因爲任何這些實體之間可能發生交易(例如:農村分行&零售分行,農村分行之間等)。這意味着我不僅要記錄銀行實體的「目的地」ID,還要保留一些數據以幫助應用程序邏輯確定要加入哪個TABLE進行查詢。我覺得這是不好的

此外,還有一個USER表,用戶可能屬於這些實體中的任何一個,這裏也有4個不同的銀行實體表存在問題。我怎麼知道用戶是屬於農村分支還是零售分支機構還是執行銀行?

因此,我創建了一個單一的BANK表(實質上是因爲它們是相似的實體,因爲它們可以相互處理)我在表中添加了一個PARENT列來保存ID的值母機構的關係(關係I ot herwise使用FKs實現)。因此,農村分行的母行欄中會有操作銀行的ID。零售分行沒有父母,因此其值爲NULL等等。

我現在看到的問題是,在BANK表中有一個PK/FK關係,這是一個循環引用。

我的問題是:這有多糟糕?什麼可能是一個出路?

回答

3

有自我指涉關係並不少見。一個缺點是,許多RDBMS不允許您對自我參照關係執行級聯刪除。除此之外,這種等級關係沒有任何巨大的缺陷。許多數據庫解決方案甚至支持擴展功能來促進這種類型的關係。

此外,我可能會建議你有這樣的銀行表,但保留對銀行類次表,使得每家銀行必須在銀行表中的記錄,另外將有一個紀錄的一個其他表格持有銀行類型特定的擴展屬性。這樣的話,關係仍然是集中的,用戶仍然可以使用單個FK綁定到銀行表格,但是您的銀行表格不會與所有不同銀行類型的擴展屬性混淆。