Ukládání vícejazyčných verzí v MariaDB

Ukládání vícejazyčných verzí v MariaDB
« kdy: 27. 01. 2020, 15:10:12 »
Aktualne mam tabulku pro ukladani produktu v jednoduche podobe:

Kód: [Vybrat]
products:
id,productName(varchar 120), description(text), descriptionLong(text), descriptionInternal(text), warehouseInstructions(text), width(double), height(double), long(double)

Pole productName,description,descriptionLong,descriptionInternal pouzivaji full-text index. Polozek je neco kolem 9000.
Do budoucna se nepredpoklada pridani dalsiho prekladu.

Je z hlediska vykonu fulltextu lepsi do stavajici tabulky pridat pole pro preklad nebo rozdelit tabulky na

Kód: [Vybrat]
products:
id, width(double), height(double), long(double)

Kód: [Vybrat]
productDesc_cz:
id,productId,productName(varchar 120), description(text), descriptionLong(text), descriptionInternal(text),

Kód: [Vybrat]
productDesc_en:
id,productId,productName(varchar 120), description(text), descriptionLong(text), descriptionInternal(text),

 
« Poslední změna: 27. 01. 2020, 15:21:48 od Petr Krčmář »


Re:Ukládání vícejazyčných verzí v MariaDB
« Odpověď #1 kdy: 27. 01. 2020, 16:56:35 »
podle me neni hezke delat tabulku pro cestinu a pro anglictinu.
spis bych udelal samostatnou tabulku description, ktera bude mit sloupec jazyk (cz/en) a sloupec popis.
takze cesky popis bude v jednom radku s cz, a anglicky popis v druhem radku s en.

* klidne muzes pridavat dalsi jazyky, proste se jen prida dalsi radek s prekladem.
* cz a en radky budou mit stejne descr_number, ktery bude odkazovan v tabulce produktu.

Re:Ukládání vícejazyčných verzí v MariaDB
« Odpověď #2 kdy: 27. 01. 2020, 18:50:48 »
Z hlediska DB je správné udělat dvě (možná tři) řešení. Buďto přidávat sloupce, (do sloupce pole), nebo to vše navázat. Pokud se jedná jen o EN a CZ a další jazyk je nepravděpodbný, udělal bych to jako slopec navíc. Kdyby to mělo být obecnější pak, vazbou:

CREATE TABLE product_translation(jazyk varchar, description text) a do něj vložit "CZ", "toto je český popis" a "EN", "this is an English description".

Dokonce to můžete zobecnit nad celou DB pomocí UUID třídy, tabulky a záznamu. Databáze si s tím pak dokáže poradit stoprocentně lépe, než Vaše vymýšlení "optimalizací". Dá se říct, že cokoliv Vás napadne jako struktura, dokáže DB zobecnit - tak se nesnažte jít proti tomu :).

Re:Ukládání vícejazyčných verzí v MariaDB
« Odpověď #3 kdy: 28. 01. 2020, 11:23:13 »
Z hlediska DB je správné udělat dvě (možná tři) řešení. Buďto přidávat sloupce, (do sloupce pole), nebo to vše navázat. Pokud se jedná jen o EN a CZ a další jazyk je nepravděpodbný, udělal bych to jako slopec navíc. Kdyby to mělo být obecnější pak, vazbou:

CREATE TABLE product_translation(jazyk varchar, description text) a do něj vložit "CZ", "toto je český popis" a "EN", "this is an English description".

Dokonce to můžete zobecnit nad celou DB pomocí UUID třídy, tabulky a záznamu. Databáze si s tím pak dokáže poradit stoprocentně lépe, než Vaše vymýšlení "optimalizací". Dá se říct, že cokoliv Vás napadne jako struktura, dokáže DB zobecnit - tak se nesnažte jít proti tomu :).


Pokud se nepletu tak u druheho reseni

Kód: [Vybrat]
CREATE TABLE product_translation(jazyk varchar, description text) a do něj vložit "CZ", "toto je český popis" a "EN", "this is an English description".
bude full-text indexovat i anglictinu a vyhledavani  to muze zpomalovat. I kdyz uz 18 000 radku to asi nebude zase takova katastrofa. Pridani sloupcu je pro danou situaci asi lepsi. Indexy pridanych sloupcu budou obsahovat jen slova, ktera se vztahuji k dane jazykove mutaci. Souhlas?

Re:Ukládání vícejazyčných verzí v MariaDB
« Odpověď #4 kdy: 28. 01. 2020, 11:29:15 »
bude full-text indexovat i anglictinu a vyhledavani  to muze zpomalovat. I kdyz uz 18 000 radku to asi nebude zase takova katastrofa. Pridani sloupcu je pro danou situaci asi lepsi. Indexy pridanych sloupcu budou obsahovat jen slova, ktera se vztahuji k dane jazykove mutaci. Souhlas?

Máte pravdu, jedná se o jedno z mnoha omezení v mysql (mariadb). V "dospělých" databázích byste udělal parciální index (CREATE INDEX ft_cz ... WHERE lang='cz').

Takže Vám opravdu nezbude, než přidat sloupec. Chjo, mysql jen kazí návyky :(.