2012-03-19 67 views
1

我目前正在處理具有以下要求的數據庫:有不同類型的帳戶。他們可以根據類型有不同的付款計劃。整個事情就像一個有兩層的層次結構。例如,如果賬戶類型是A和B,那麼支付計劃可以是A1,A2,B1和B2,其中Ax只對賬戶類型A有效等等。多餘的外鍵?

到目前爲止,我有以下設置: 一個表account_typesID。 A表payment_plans with account_type_id and id,它們都是PK的一部分。並且表帳戶type_idplan_id。我想這很明顯是什麼引用了什麼。

我的問題是這樣的:accounts.type_id是一個FK和accounts.type_id + accounts.plan_id是複合FK。我不知道這是否是一個最佳解決方案。 type_id有點多餘,因爲它隱含地由plan_id定義,但僅限於表payment_plans表中的約束。那麼這裏最好的做法是什麼?我可以完全清除type_id,但這時就需要再次加入payment_plans表,以確定帳戶的類型。

感謝您的提前輸入。涉及完全不同結構的建議也受到歡迎。;-)

回答

0

我會有這些表:

  • account_types
    • id:PK
    • name
  • payment_plans
    • id:PK
    • account_type_id:FK到account_types
  • accounts
    • 任何列的帳戶需要
  • accounts2payment_plans
    • account_id:FK到accounts和PK
    • 的一部分
    • payment_plan_id:FK至payment_plans和PK

的一部分,這背後的原因是:

  1. 每個賬戶類型可以有多個付款計劃,因此payment_plans表需要引用account_type表。通過此參考,定義了付款計劃的類型。
  2. 每個賬戶可以有多個付款計劃,但每個付款計劃可以被多個賬戶使用,這就是爲什麼需要映射表accounts2payment_plans。通過從賬戶到付款計劃的映射,隱式地定義了賬戶的所有賬戶類型。
+0

感謝您的回答。但是,您誤解了我的看法,即一個帳戶只能分配一個付款計劃。根據賬戶類型只有多種選擇。我想我沒有說清楚。無論如何,最讓我感興趣的是通過付款計劃隱式定義賬戶類型是否明智,因此我將此標記爲公認的答案。 – user1047771 2012-03-28 15:31:48