3

これまでにいくつかの方法を行ってきました。私は、このために良いパターンがあるかどうかを知りたいと思います。ダイナミックな多言語データ構造のためのdbデザインパターン

システムには動的コンテンツがあります。したがって、データ量とデータそのものは動的(カウント(行))だけでなく、フィールド数も動的です。ブログには翻訳が必要な10個のフィールドがありますが、ショッピングカートアイテムには5個あります。

私が行ってきたことは、そのフィールドの言語データを保持するテーブル行のIDを挿入することでした。この言語表には、id、defaultlanguage、任意の数の追加言語があります。この方法では、1つの言語表しかありません。

これは気が気ですが、複数のジョインが同じテーブルを参照するときには更新できません(MySQL)ので、ビューを更新できません。それから、おそらくこれを行うもっと良い方法があります。

優れたデザインはありますか?このような状況で使用される一般的なデザインパターンは何ですか?

答えて

1
  • エンティティFieldTypesID
  • エンティティフィールドIDFIELDTYPE
  • エンティティFieldValuesプロパティIDCollectionIDフィールド
  • エンティティコンテンツIDフィールドデータ
  • エンティティI18NIDフィールド言語ID,

例:

insert into FieldTypes('S', 'string'); 
insert into FieldTypes('DT', 'date/time'); 

insert into Fields(1, 'Author', 'S'); 
insert into Fields(2, 'Created', 'D'); 

insert into i18n(1, 1, 'en', 'Author'); 
insert into i18n(2, 1, 'ru', 'Автор'); 
insert into i18n(3, 2, 'en', 'Created'); 
insert into i18n(4, 2, 'ru', 'Создано'); 

insert into Content(1, 2, 'Test data'); 
insert into FieldValues(3, 2, 1, 'Tester'); 
insert into FieldValues(4, 2, 2, '2011-03-20T12:20:00'); 

/* Display content fields in the user language */ 
select c.ID, f.ID, i.Value as FieldName, fv.Value as FieldValue 
from Content c, FieldValues fv, Fields f, i18n i 
where c.Fields = fv.CollectionID 
    and fv.Field = i.Field 
    and i.LanguageID = :UserLanguage 
    and c.ID = :ContentID 
+0

あなたはこれをしてください説明することができます。このテーブルは、他の多くのテーブルのすべての変換データを保持する1つのテーブルですか? –

+0

テーブル「i18n」は、サイトコンテンツ(ブログ投稿、ニュース、記事など)の多くのカスタムフィールドの翻訳データを保持します。 – vemcaster

関連する問題