sql >> Base de Datos >  >> RDS >> Sqlserver

Traducción de idiomas para tablas

No estoy seguro de por qué le preocupa la cantidad de tablas:tener menos tablas no significa automáticamente que su base de datos sea más pequeña, más eficiente o mejor diseñada. Especialmente si reducir la cantidad de tablas aumenta la complejidad de sus consultas, sería muy cuidadoso al hacerlo.

De todos modos, optaría por una tabla de traducción por tabla 'base'. La razón principal es que su segunda solución no es flexible:si la clave principal no es un solo número entero, se vuelve extremadamente difícil de implementar y usar. Consultar traducciones también es más complejo y, según el tamaño de la tabla y los datos, puede ser difícil indexarlo de manera efectiva.

No está claro por qué tienes un TranslationID en los Products mesa; normalmente la relación es al revés:

create table dbo.Products (
    ProductCode char(10) not null primary key,
    ProductName nvarchar(50) not null,
    ProductDescription nvarchar(100) not null,
    -- other columns
)

create table dbo.ProductsTranslations (
    ProductCode char(10) not null,
    LanguageCode char(2) not null,
    ProductName nvarchar(50) not null,
    ProductDescription nvarchar(100) not null,
    -- other translations
    constraint FK1 foreign key (ProductCode)
        references dbo.Products (ProductCode),
    constraint FK2 foreign key (LanguageCode)
        references dbo.Languages (LanguageCode),
    constraint PK primary key (ProductCode, LanguageCode)
)

Dependiendo de su conjunto de herramientas y proceso de implementación, es posible que desee generar tablas de traducción directamente desde las bases como parte de la creación de su base de datos. Y puede usar vistas para proporcionar una versión conveniente y 'totalmente traducida' de la tabla base.

Una pregunta interesante es qué idioma se usa para las columnas en Products y si se pueden usar directamente cuando no se requiere traducción. Mi sugerencia sería que todo el código de producción pase un parámetro de idioma y tome el texto de ProductsTranslations table solamente, incluso para inglés (o cualquiera que sea su idioma corporativo interno). De esa manera, puede estar seguro de que todos los nombres "oficiales" se encuentran en la misma tabla, y las columnas de la tabla base están ahí para mayor claridad y exhaustividad del modelo de datos, así como para la conveniencia del desarrollador y (posiblemente) el uso interno en ad hoc. informes, etc.