Duplicar posible:
Schema for a multilanguage databaseEl diseño de un esquema de base de datos localizada
Estoy trabajando en una aplicación web que tengo la intención de hacer disponible en varios idiomas. A medida que diseño la base de datos, voy y vienen entre dos formas diferentes de almacenar descripciones localizadas y otras cosas en la base de datos.
La primera opción es la nombre_tabla conocido, opción de tipo de table_name_ml:
TABLE Category (
ID int,
ParentID int,
Name varchar(50),
Description varchar(255)
)
TABLE Category_ML (
ID int,
CategoryID int,
LocaleID int,
Name varchar(50),
Description varchar(255)
)
La segunda opción sería la de no almacenar el texto en las tablas de base en todo, pero en lugar guardar un testigo que podría ser utilizado para buscar el texto localizado real en otro lugar, como este:
TABLE Category (
ID int,
ParentID int,
NameToken varchar(50),
DescriptionToken varchar(50),
)
// Tables in a separate content management type system
TABLE Content (
ID int,
Token varchar(50)
)
TABLE Translation (
ID int
ContentID int,
LocaleID int,
Value text
)
la idea aquí es que las tablas de contenido y la traducción se mantenga el texto localizado para muchas entidades diferentes en la base de datos. La capa de servicio devolvería los objetos base solo con los tokens y la capa de vista buscaría los valores de texto reales usando las tablas Contenido/Traducción, que se almacenarían en caché. Las tablas de Contenido/Traducción también se usarían para almacenar otro tipo de contenido CMS (texto estático en páginas web, etc.)
Me gusta la primera opción porque es verdadera y comprobada, pero la segunda opción parece tener tantas otras ventajas:
- Todo mi texto/contenido localizado está en un solo lugar (hace la traducción más fácil).
- La capa de servicio realmente no necesita preocuparse por las configuraciones regionales.
- Simplifica las consultas al no tener que unirse a un grupo de tablas de tipos ML.
Como nunca antes había visto un diseño como este, supongo que me falta algo. ¿Alguna buena razón para no diseñarlo de esta manera? ¿O tal vez hay una opción mejor en la que no he pensado?
¿Por qué tienes una tabla de contenido? ¿No podría usar su token para buscar directamente la traducción en la tabla de traducción? –
No, eso lo pienso, si los tokens solo contienen información como. . ¿por qué la categoría de la tabla necesitaría token-properties de todos modos? –
@paskster - La tabla de contenido está allí para evitar la duplicación de la columna del token en la tabla de traducción. Habría muchas traducciones para un token dado. También le permite tener RI entre la tabla de Categoría y la tabla de Contenido si lo desea. –