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.
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:
- O limbă nouă e un rând nou, nu o migrare de schemă
- Se vede imediat ce e tradus și ce nu, printr-un simplu
COUNT - 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.