Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Езиков превод за таблици

Не съм сигурен защо се притеснявате за броя на таблиците:наличието на по-малко таблици не означава автоматично, че вашата база данни е по-малка, по-ефективна или по-добре проектирана. Особено ако намаляването на броя на таблиците увеличава сложността на вашите заявки, ще бъда много внимателен да го направя.

Както и да е, бих избрал една таблица за превод на „базова“ таблица. Основната причина е, че второто ви решение не е гъвкаво:ако първичният ключ не е едно цяло число, тогава става изключително трудно за прилагане и използване. Запитването за преводи също е по-сложно и в зависимост от размера на таблицата и данните може да е трудно да се индексира ефективно.

Не е ясно защо имате TranslationID на Products маса; обикновено връзката е обратната:

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

В зависимост от вашия набор от инструменти и процеса на внедряване може да искате да генерирате таблици за превод директно от базовите като част от изграждането на вашата база данни. И можете да използвате изгледи, за да предоставите удобна, „напълно преведена“ версия на основната таблица.

Един интересен въпрос е какъв език се използва за колоните в Products и дали могат да се използват директно, когато не се изисква превод. Моето предложение е целият производствен код да предава езиков параметър и да взема текста от ProductsTranslations само таблица, дори и за английски (или какъвто и да е вашият вътрешен корпоративен език). По този начин можете да сте сигурни, че всички „официални“ имена се намират в една и съща таблица, а колоните в основната таблица са там за яснота и изчерпателност на модела на данни, както и за удобство на разработчиците и (евентуално) вътрешна употреба при ad hoc доклади и т.н.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Групово актуализиране на записи с SQL

  2. SQL Server BULK INSERT от Linux

  3. Свързване на Genero към SQL Server

  4. SQL за намиране на първия нечислов знак в низ

  5. Как програмно да задам низа за връзка за Entity-Framework Code-First?