2014-10-03 26 views
0

在(MySQL)數據庫中,我存儲了一個視圖層次結構,每個表中的每行都引用一個視圖。有幾種類型的視圖,但它們存儲在同一個表中。如何從數據庫中引用代碼中的硬編碼值?

在應用程序代碼中,每種類型的視圖都有它自己的類。數據庫中的每一行都會實例化這些類中的一個。

我該如何從數據庫中引用這些類,以便應用程序知道使用哪個類?

我能想到的幾種可能性:

  • 只需直接在表中指定的類名,但是這需要改變許多行的缺點,如果類名稱的變化(這是可以做到如果需要,在單個查詢中)。
  • 有一個單獨的表存儲類名,並使用外鍵指向存儲正確類名的行。在這種情況下,我可以放棄在此查找表中使用ID字段,而將類名稱作爲主鍵和目標外鍵,並且如果類名更改,則依靠級聯UPDATE

有更好的選擇嗎?

回答

0

如果我理解正確,您希望維護視圖名稱和類名稱之間的關聯。

你的項目符號表明,對於同一個類可以有多個視圖,並且你的兩個建議都可以工作。第二個項目符號的優點是可以通過單個更新來更改類名稱。但是這並不會給你帶來太多的收益,因爲一旦不止一個類名發生變化,即當關聯本身發生變化時,就需要更新多行。

你甚至可以創建一個單獨的表,持有這個關聯。這將成爲n:m關係的模型,這太籠統了,因此您必須在視圖名稱上添加一個唯一約束。從本質上講,這只是將視圖名稱與類名關聯起來的問題,並允許您完全更改此機制,而不必混淆您的表(除了擁有此關聯的表)。我實際上不會在數據庫中存儲任何這些東西 (我也發現視圖名稱存儲在數據庫中而不是應用程序邏輯中令人不快)。有類名的事實應該與你的數據庫無關。這是應用程序邏輯,應該在那裏處理。所以你需要的是在視圖名稱已知時實例化對象的方法。這看起來像我經典的工廠。畢竟,如果類名稱發生更改,那麼應用程序代碼中的更改將更加容易,並且所有更改的結果都位於應用程序代碼中。

+0

如果我不在數據庫中的任何位置存儲類名,那麼如何知道在應用程序邏輯中實例化哪個類?還是應該使用一些單獨的標識符,這些標識符仍然需要在某個地方硬編碼到類中? – Robert 2014-10-03 10:39:43

相關問題