sql >> Databasteknik >  >> RDS >> Sqlserver

Språköversättning för tabeller

Jag är inte säker på varför du är orolig över antalet tabeller:att ha färre tabeller betyder inte automatiskt att din databas är mindre, effektivare eller bättre utformad. Särskilt om en minskning av antalet tabeller ökar komplexiteten i dina frågor, skulle jag vara mycket försiktig med att göra det.

Hur som helst, jag skulle välja en översättningstabell per "bastabell". Det främsta skälet är att din andra lösning inte är flexibel:om primärnyckeln inte är ett enda heltal blir det extremt svårt att implementera och använda. Att söka efter översättningar är också mer komplext, och beroende på storleken på tabellen och data kan det vara svårt att indexera det effektivt.

Det är inte klart varför du har ett TranslationIDProducts tabell; vanligtvis är förhållandet tvärtom:

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)
)

Beroende på din verktygsuppsättning och driftsättningsprocess kanske du vill generera översättningstabeller direkt från basen som en del av din databasuppbyggnad. Och du kan använda vyer för att tillhandahålla en bekväm, "fullständigt översatt" version av bastabellen.

En intressant fråga är vilket språk som används för kolumnerna i Products och om de kan användas direkt när ingen översättning krävs. Mitt förslag skulle vara att all produktionskod ska passera en språkparameter och ta texten från ProductsTranslations endast tabell, även för engelska (eller vad ditt interna företagsspråk nu är). På så sätt kan du vara säker på att alla "officiella" namn finns i samma tabell, och kolumnerna i bastabellen är till för att datamodellen ska vara klar och fullständig, samt för att underlätta för utvecklare och (eventuellt) intern användning vid ad hoc rapporter och så vidare.




  1. mysql lagrad funktionsparameter

  2. MySql visar prestanda

  3. Beräkna maximalt antal samtidiga användarsessioner

  4. Hur kan jag framtvinga sammansatt unikhet i MySQL?