Aplicaciones multilenguaje han existido de siempre, pero me encuentro con la duda de cómo plantear la base de datos para una webapp multilenguaje.
He pensado en los siguientes planteamientos:
1 Columnas adicionalesCREATE TABLE app_product (
Id Int IDENTITY NOT NULL,
Description_es Text,
Description_fr Text,
PRIMARY KEY (Id)
);
Simple y facilidad para realizar las consultas, difícil si el día de mañana quiero añadir un nuevo idioma, difícil mantenimiento.2 Unica tabla de traducciónCREATE TABLE ref_language (
Code Char(2)NOT NULL,
Name Varchar(20) NOT NULL,
PRIMARY KEY (Code)
);
CREATE TABLE app_translation (
Id Int IDENTITY NOT NULL,
PRIMARY KEY (Id)
);
CREATE TABLE app_translation_entry (
TranslationId Int NOT NULL,
LanguageCode Char(2) NOT NULL,
Text Text NOT NULL,
FOREIGN KEY (TranslationId) REFERENCES app_translation(Id),
FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code)
);
CREATE TABLE app_product (
Id Int IDENTITY NOT NULL,
Description Int NOT NULL,
PRIMARY KEY (Id),
FOREIGN KEY (Description) REFERENCES app_translation(Id)
);
Posibilidad de añadir nuevos idiomas con facilidad. Dificultad para realizar las consultas, habría que ver cómo penalizan las consultas al servidor.
3 Tabla adicional CREATE TABLE ref_language (
Code Char(2)NOT NULL,
Name Varchar(20) NOT NULL,
PRIMARY KEY (Code)
);
CREATE TABLE app_product (
Id Int IDENTITY NOT NULL,
PRIMARY KEY (Id)
);
CREATE TABLE app_product_translation (
ProductId Int NOT NULL,
LanguageCode Char(2) NOT NULL,
Description Text NOT NULL,
FOREIGN KEY (ProductId) REFERENCES app_product(Id),
FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code)
);
No requiere cambiar el esquema para añadir un nuevo idioma, consultas más simples, pero desventaja de la cantidad de tablas.
¿Qué camino pensáis que es el correcto?
Saludos