1

這是一個通用的數據庫設計問題。下表假設:數據庫設計:如何存儲轉換後的數字?

====================================================================== 
| product_translation_id | language_id | product_id | name | price | 
====================================================================== 
| 1      | 1   | 1   | foobar | 29.99 | 
---------------------------------------------------------------------- 
| 2      | 2   | 1   | [email protected]#$%^ | &*()_ | 
---------------------------------------------------------------------- 

(假設LANGUAGE_ID = 2是一些語言,不是基於拉丁字符等)

是否適合我存儲在數據庫轉換的價格是多少?雖然它允許我正確顯示翻譯,但我擔心在我想對它們進行數學運算時會給我帶來問題(例如,向&*()_添加10%的銷售稅)。

什麼是處理數字翻譯的好方法?

+0

我的建議是將數量存儲在一列中,將單位/區域/語言定義存儲在另一列中。 – 2011-05-12 03:48:28

回答

2

如果您可以通過編程方式將「29.99」轉換爲「& *()_」,那麼我會將價格放在產品表中,並將其轉換爲顯示層。如果存儲了兩次,那麼你將有兩個明顯的問題:

  1. 您將結束與一致性問題,因爲你是在兩個不同的地方存放在兩個不同的格式同樣的事情。
  2. 您將以文本格式存儲數字數據。

第一個問題會導致你很多頭痛,當你需要更新你的價格和你的會計師會討厭你弄亂書。

第二個問題會讓你的數據庫憎恨你,只要你需要在數據庫內進行任何計算或比較。一遍又一遍地調用CONVERT(string AS DECIMAL)將會產生成本。

您可以在產品表中將價格保留爲數字形式(用於計算,排序等),然後以字符串的形式在翻譯表中進行本地化翻譯。這種方法只是放大了上述兩個問題。但是,如果您需要人工翻譯您的數字,那麼這種方法可能是必要的。如果你堅持這樣做,那麼你可以通過在每次更新之後運行某種完整性檢查器來緩解一致性問題,甚至可以用某種觸發器來包裝完整性檢查器。

相關問題