IVTEC Soluții web pe măsură

Două limbi într-o bază de date, fără să te încurci

Coloane paralele sau tabel de traduceri? Diferența se vede abia la a treia limbă, dar atunci se vede tare.

Ilustrație pentru articolul Două limbi într-o bază de date, fără să te încurci

Când construiești un site bilingv, prima tentație e să adaugi title_ro și title_en lângă restul coloanelor. Merge. Merge chiar bine, până în ziua în care cineva cere și maghiară.

Cele două variante

Coloane paralele înseamnă un singur tabel, interogări directe și zero JOIN-uri. Editorul e simplu: un formular cu două câmpuri pentru fiecare text.

Tabel de traduceri înseamnă un tabel părinte cu tot ce nu depinde de limbă și un tabel copil cu textele:

SELECT p.id, t.title, t.slug
  FROM posts p
  JOIN post_translations t ON t.post_id = p.id AND t.lang = :lang
 WHERE p.status = 'published'

De ce am ales a doua

Nu pentru că e mai elegantă, ci pentru trei motive practice:

  1. O limbă nouă e un rând nou, nu o migrare de schemă
  2. Se vede imediat ce e tradus și ce nu, printr-un simplu COUNT
  3. Slug-urile pot fi diferite pe limbă, ceea ce contează pentru căutare

Prețul

Fiecare interogare are un JOIN în plus, iar formularul din admin devine ceva mai complicat. La un site personal, ambele sunt neglijabile. La un catalog cu zeci de mii de produse, merită măsurat înainte.

Articole înrudite