簡體   English   中英

SQL Server 2008表的本地化

[英]SQL Server 2008 localization of tables

我需要本地化SQL Server 2008數據庫。 在研究了建議之后,我發現最好有單獨的表或字符串的每種語言。 這樣,可以為每個表設置不同的排序設置。 例如,典型的產品表具有ProdID,產品描述和價格字段。 推薦的解決方案是將表結構設置為Product表為ProdID和Price。 然后,每種語言的特定表將具有以下結構:ProdID和Description。

我的問題是如何創建一個存儲過程,該存儲過程的參數傳入區域性中以用於子表,然后使用該參數來聯接表? 子表需要根據參數進行更改。 那怎么辦? 我正在使用SQL Server 2008。

首先,您確定要為每種文化實施不同的表嗎? 修改您的Product表以刪除描述,然后添加具有ProdID,區域性和描述字段的ProductDescription表,會更有意義。 這樣,您就不必動用動態SQL(這是您將要使用的)來根據區域性參數選擇正確的表。

...每種語言的特定表將具有以下結構:ProdID和描述。

...這就是為什么您必須查看一個真正涉及的設置才能從數據庫中獲取信息的原因。

更好的方法是使用單個表,並為該語言使用代碼。 您也不想為要轉換的每個屬性定義一列,因此您將考慮實現以下內容:

LANGUAGES

  • LANGUAGE_ID GUID
  • LANGUAGE_DESCRIPTION

示例數據:

LANGUAGE_ID  |  LANGUAGE_DESCRIPTION
------------------------------------
1            |  ENGLISH
2            |  FRENCH

TRANSLATED_ATTRIBUTES

  • TRANSLATED_ATTRIBUTE_ID ,pk
  • TRANSLATED_ATTRIBUTE_DESC

示例數據:

TRANSLATED_ATTRIBUTE_ID  |  TRANSLATED_ATTRIBUTE_DESC
------------------------------------
1                        |  PROD_ID
2                        |  PROD_DESC

LOCALIZATIONS

  • LANGUAGE_ID GUID
  • TRANSLATED_ATTRIBUTE_ID ,pk
  • TRANSLATED_VALUE

示例數據:

LANGUAGE_ID | TRANSLATED_ATTRIBUTE_ID | TRANSLATED_VALUE
----------------------------------------------------------
1           |  1                      | Product ID
2           |  1                      | Produit ID

您需要一個將TRANSLATED_ATTRIBUTE_ID與給定項目相關聯的表-產品就是您所給的示例,因此:

ATTRIBUTES

  • ATTRIBUTE_ID
  • ATTRIBUTE_TYPE_CODE
  • TRANSLATED_ATTRIBUTE_ID ,fk

示例數據:

ATTRIBUTE_ID  |  ATTRIBUTE_TYPE_CODE  |  TRANSLATED_ATTRIBUTE_ID
----------------------------------------------------------------
1             |  PRODUCT              | 1

如果要基於每個產品進行關聯:

ATTRIBUTES

  • ATTRIBUTE_ID
  • PRODUCT_ID
  • TRANSLATED_ATTRIBUTE_ID ,fk

現在,您可以使用兩個參數-語言(英語)和項目名稱(產品):

SELECT t.translated_attribute_desc, 
       t.translated_value
  FROM LOCALIZATIONS t
  JOIN TRANSLATED_ATTRIBUTES ta ON ta.translated_attribute_id = t.translated_attribute_id
  JOIN ATTRIBUTES a ON a.translated_attribute_id = ta.translated_attribute_id
  JOIN ATTRIBUTE_TYPE_CODES atc ON atc.attribute_type_code = a.attribute_type_code
  JOIN LANGUAGES lang ON lang.language_id = t.language_id
 WHERE lang.language_description = 'ENGLISH' --alternate: lang.language_id = 1
   AND atc.attribute_type_code = 'PRODUCT'

您可以根據需要旋轉數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM