sql >> Databáze >  >> RDS >> Sqlserver

Jazykový překlad pro tabulky

Nejsem si jistý, proč vás znepokojuje počet tabulek:mít méně tabulek automaticky neznamená, že je vaše databáze menší, efektivnější nebo lépe navržená. Zvláště pokud snížení počtu tabulek zvyšuje složitost vašich dotazů, byl bych při tom velmi opatrný.

Každopádně bych šel pro jednu překladovou tabulku na „základní“ tabulku. Hlavním důvodem je, že vaše druhé řešení není flexibilní:pokud primární klíč není jedno celé číslo, pak je jeho implementace a použití extrémně obtížné. Dotazování na překlady je také složitější a v závislosti na velikosti tabulky a dat může být obtížné je efektivně indexovat.

Není jasné, proč máte TranslationID na Products stůl; obvykle je vztah opačný:

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

V závislosti na vaší sadě nástrojů a procesu nasazení možná budete chtít generovat překladové tabulky přímo ze základních jako součást sestavení databáze. A můžete použít pohledy k poskytnutí pohodlné, „plně přeložené“ verze základní tabulky.

Jedna zajímavá otázka je, jaký jazyk se používá pro sloupce v Products a pokud je lze použít přímo, když není vyžadován překlad. Můj návrh by byl, že veškerý produkční kód by měl předat parametr jazyka a převzít text z ProductsTranslations pouze tabulku, a to i pro angličtinu (nebo jakýkoli váš interní firemní jazyk). Tímto způsobem si můžete být jisti, že všechny „oficiální“ názvy se nacházejí ve stejné tabulce a sloupce v základní tabulce jsou zde z důvodu jasnosti a úplnosti datového modelu, stejně jako pohodlí pro vývojáře a (možná) interního použití ad hoc. zprávy a tak dále.




  1. Mysql errno 150 se pokouší vytvořit tabulku s odkazy na cizí klíč

  2. Shromáždit statistiky o indexu nebo vytvořit pokles?

  3. získat poslední vložené ID na serveru SQL 2008

  4. Přihlášení se nezdařilo se stávajícím uživatelem na PostgreSQL