2010-08-04 71 views
0

比方說,我有一個表有report_type列,我只有2種報告類型。用它們創建一個report_types表是否值得它,然後用一個外鍵引用它到這個表中?或者是否可以將報告類型作爲字符串存儲在該列中?我應該如何嚴格地創建一個單獨的關聯表?

+0

什麼是你的價值做領域後檢索它? – 2010-08-04 01:36:43

+0

@Joe:沒什麼,它只是用於過濾目的。 – ryeguy 2010-08-04 01:38:58

回答

1

需要考慮的事情:

  • ,你可能會在將來添加新的報告類型?
  • 您是否可能擁有其他也引用報告類型的表格(例如用於統計信息收集或審計)?
  • 是否可能在其他上下文中使用這些值(例如GUI下拉小部件)?
  • 您是否需要將附加數據(例如長描述)與報告類型關聯?

我知道這似乎有點像矯枉過正現在建立一個表,只保存兩行。坦率地說,如果你決定堅持使用列和檢查約束,Yagni的衆神會支持你。但是,如果您已經有一堆代碼查找表來執行受限制的值集合,那麼在一致性中也有價值。

0

這是如果你曾經計劃擴大的道路。我認爲真正的問題是,是否不值得製作額外的桌子?

2

只要有可能,您應該始終計劃規範化您的數據庫並抽象出您的代碼。然而,你做的越多,你就會在系統中獲得更多的「間接」。更好的問題是,在將表格的工作量與重新設計代碼的成本相比較時,會產生多少開銷。

在這種情況下,我幾乎可以肯定地說,值得您花時間規範化數據庫。

0

我通常會建議標準化您的數據,但這似乎是一個足夠簡單的情況,您可能不會從中看到太多好處。正如你所說,你只是使用該字段進行過濾,因此只需要使用數據本身中存在的值。

如果您希望用戶看到某個特定報告類型的記錄爲零,那麼您需要使用關聯的表。

0

如果所有報告具有相同的列集,但您使用報告類型只是來加速過濾,那麼你可以簡單地使用:

report_model_v1

如果有與相關的一些額外列ReportType - 像ReportTypeDescription - 然後使用:

report_model_v2

如果每個報告類型有不同的列集 - 例如所有報告都索姆E共有列(Col1Col2Col3),然後每種類型都有一些特定的列(Type1_Col1Type1_Col2)(Type2_Col1Type2_Col2) - 然後使用:

report_model_v3

相關問題