(Özel alanlarla) multilang katalog DB yapı tasarımı

0 Cevap php

Yakında multilang içerik desteğe sahip olacak katalog (php + mysql) üzerinde çalışıyor olacağım. Ve şimdi ben veritabanı yapı tasarımı için en iyi yaklaşım olarak düşünüyorum. Şu anda ben multilang taşınması için 3 yolları bkz:

1) Her dil belirli bir veri için ayrı tablolar olması, yani schematicly bu gibi bakacağız:

  • Orada, Main_Content_Items bir tablo olabilir kimliği, creation_date gibi tercüme edilemez temel veri depolama, vurur, böylece üzerinde oylama olacak - bu tek olacak ve tüm diller için sevk edecektir.

Ve burada her dil için dublicated edilecek tablolar şunlardır:

  • Common_Data_LANG table(example: common_data_en_us) (tercüme edilebilir ortak / "statik" alanlar depolamak, ama ENY katalog öğe için mevcut: böylece başlık, açıklamaya ve ...)
  • Extra_Fields_Data_LANG table (storing extra fields data that can be translated, but can be different for custom item groups, i.e. like: | id | item_id | field_type | value | ...) Then on items request we will look in table according to user/default language and join translatable data with main_content table.

Artıları:

  • biz bir sorgu yalnızca en sık güncellenen "ana" verileri (örneğin vurur, oy ...) güncelleyebilirsiniz
  • Biz 'lang' alanı ile yalnızca bir tablo kullanan yapısı ile karşılaştırıldığında 4 veya daha fazla dil varsa, biz o dublicate veri 4x veya daha fazla kez gerekmez. Yani MySQL sorguları (örneğin) 400000 veya daha ziyade katalog kayıtları 100.000 geçmesi için daha az zaman alacaktır

Eksileri:

  • Her dil için +2 masalar

2) İçerik tablolarda 'lang' alanını kullanarak:

  • Main_Content_Items table (ID, creation_date gibi tercüme edilemez temel veri depolama vurur, böylece on oylama ...)
  • Common_Data table (tercüme edilebilir ortak / "statik" alanlar depolamak, ama ENY katalog öğe için mevcut: | id | item_id | lang | başlık | azalan | vb ...)
  • Extra_Fields_Data table (storing extra fields data that can be translated, but can be different for custom item groups, i.e. like: | id | item_id | lang | field_type | value | ...) So we'll join common_data and extra_fields to main_content_items according to 'lang' field.

Artıları:

  • biz bir sorgu yalnızca en sık güncellenen "ana" verileri (örneğin vurur, oy ...) güncelleyebilirsiniz
  • içerik veri için biz sadece 3 tablo

Eksileri:

  • biz custom_data ve tüm diller için veri ile dolu extra_fields tablo var, bu yüzden onun X zaman büyük ve sorgular daha yavaş çalışacak

2. yol olarak, ama Main_Content_Items tablo ile 3) Aynı 'lang' alanına sahiptir Common_Data, ile birleşti:

Artıları:

  • ? ...

Eksileri:

  • her dil için birlikte en sık güncellenen "ana" verileri (örneğin vurur, oy ...) güncelleştirmesini güncellemeniz gerekir
  • biz custom_data ve tüm diller için veri ile dolu extra_fields tablo var, bu yüzden onun X zaman büyük ve sorgular daha yavaş çalışacak

"Ne iyi" ve "niçin" hakkında önerilerinizi duymak mutluluk duyacağız? Ya da daha iyi yolları vardır?

Şimdiden teşekkürler ...

0 Cevap