Konuşulan dil varyant için ilişkisel veritabanı tasarımı iyi uygulama

1 Cevap php

Peki, burada küçük bir sorundur.

Ben temelde bir konuşulan dil, ne kullanmak için bir web uygulaması veritabanı tasarımı duyuyorum. Ancak bu dil iki alfabe (Latin & Kiril) ve aslında sadece bazı küçük farklılıklar (Ben biraz farklı birkaç yüz kelime olduğunu düşünüyorum) sahip üç konuşulan çeşitleri vardır. Konularda daha zor hale getirmek için, veri tabanı ve yönetim arayüzü tüm makaleleri (yanı sıra arayüzü) için komut ve iki sözlü varyantları hem kullanımı ve diğer tek (Latince) kullanacak biri iki uygulama için kullanılacaktır.

Ben kullanıcıya bir giriş daha kolay yapmak gerekir, ama şimdi ben hakkında şüphe duyuyorum bazı veritabanı / uygulama normalleştirme karşılaştığı sorunlar yaşıyorum latin-to-kiril-ve-back "çeviri" için bir algoritma yazdı.

(1) Ben konuşulan dil sorunu olarak bu tedavi ve buna göre veritabanı oluşturmak olabilir.

| 'variant' | [id, name] #language variant
| 'article' | [id, <all variant non-dependent fields>] # such as image, relations, etc
| 'article_variant' | [id, fk_language_variant_id, fk_article_id, <all variant dependent fields>] #title, body, etc
| 'article_has_variants' | [id, fk_article_id, fk_article_variant_id]

Ancak nedeniyle 'article_variant' veritabanı girişlerinin en aynı bilgileri içeren olacağını aslında gereksiz görünüyor.

(2) uygulama düzeyinde çözmeye kullanıcıya görüntüler için "latin-to-kiril-ve-back" algoritması ile 'makale' tablosu ve kelime çiftlerini kullanarak bunu yapabilirdi. Sonra benim veritabanı bunun gibi bir şey olacaktır:

| 'variant' | [id, name] #language variant
| 'article' | id, <all fields>
| 'words' | id, word
| 'word_pairs' | id, fk_word_id, fk_word_id

Bu çözüm benim için mükemmel görünüyor, ama nedeniyle (a) (bütün bir yazı her kelime çifti için varsayılan farklı dil varyantını görüntülenir her zaman çukur gitmek vardır ve aslında uygulama performansı üzerinde olurdu etkisinden endişe duyuyorum bu çifti bulunuyor için> њ) - b) bundan sonra böyle nj kompleks mektup dönüşüm nedeniyle alfabenin her harfini (+ birkaç kez dönüştürmek için vardır.

Herhangi bir düşünce?

1 Cevap

Ben önbelleğe alma ile dinamik bir seçeneği kullanmak istiyorum. Gibi, eşyanın sadece bir varyant (bir ilk oluşturulduğu edilir) depolamak ve anında diğer varyantları oluşturmak

 article = select from articles
 if article.lang != requested_lang
     text = select from cache where id=article.id and lang=requested_lang
     if !text
          text = convert_language(article.text, requested_lang)
          insert into cache(article.id, requested_lang, text
     echo text
 else
    echo article.text

(Bu ben bu durumda olup olmadığından emin değilim, dil dönüşümler tam otomatik olduğunu ima)