データのローカライズされたバージョンを保存するための優れたデータベース テーブル設計 [クローズド]
-
02-07-2019 - |
質問
後で別の言語に変換する必要があるデータを保存するテーブルを設計しようとしています。誰かがこれに関する「ベストプラクティス」またはガイドラインを提供できますか?
ありがとう
解決
次のような製品テーブルがあるとします。
Products
----------
id
price
Products_Translations
----------------------
product_id
locale
name
description
次に、product_id = product.id および where locale='en-US' で結合するだけです。
もちろん、名前と説明を取得するには結合が必要になるため、これはパフォーマンスに影響しますが、後で任意の数のロケールを使用できるようになります。
他のヒント
あなたが何をしているかについてもっと詳しい情報が役立つと信じています。データのサンプルをいくつか教えていただけますか?そして、ダイナミックとは何を意味しますか?時間の経過とともに大量のデータが挿入され、そのデータに多くの変更が加えられること、またはデータが短期間だけ利用可能になる必要があること。
一般に、ローカライズされていない共通データを含む親テーブルと、ローカライズされたデータと言語キーを含む子テーブルを検討する必要があります。動的とは、頻繁に変更されることを意味する場合、トリガーや「translationRequired」フラグのようなものを使用して、変更が行われた後に翻訳が必要なものをマークすることを検討するとよいでしょう。
「動的データ」の性質について説明していただけますか?
これを実装する 1 つの方法は、3 つの異なるテーブルを用意することです。
- 言語テーブル
- このテーブルには言語とキーが格納されます。
[1, English], [2, Spanish]
- データ定義テーブル
- 動的データが最初に入力されると、データの識別子を使用してこのテーブルにレコードを作成します。
[1, 'Data1'], [2, 'Data2']
- データ言語テーブル
- このテーブルは言語、データ定義、翻訳をリンクします。
So: [Data_Language, Data_Definition, Language, Translation] [1, 1, 1, 'Red'] [2, 1, 2, 'Rojo'] [3, 2, 1, 'Green'] [4, 2, 2, 'Verde'] etc ...
動的データが入力されると、デフォルトの「英語」レコードが作成され、好きなときに翻訳できます。
所属していません StackOverflow