Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Tłumaczenie językowe dla tabel

Nie jestem pewien, dlaczego martwisz się liczbą tabel:posiadanie mniejszej liczby tabel nie oznacza automatycznie, że Twoja baza danych jest mniejsza, bardziej wydajna lub lepiej zaprojektowana. Zwłaszcza jeśli zmniejszenie liczby tabel zwiększa złożoność zapytań, byłbym bardzo ostrożny.

W każdym razie wybrałbym jedną tabelę tłumaczeń na tabelę „podstawową”. Głównym powodem jest to, że drugie rozwiązanie nie jest elastyczne:jeśli klucz podstawowy nie jest pojedynczą liczbą całkowitą, bardzo trudno jest go zaimplementować i używać. Zapytania o tłumaczenia są również bardziej złożone i w zależności od rozmiaru tabeli i danych może być trudno je skutecznie zindeksować.

Nie jest jasne, dlaczego masz TranslationID na Products stół; zazwyczaj związek jest na odwrót:

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

W zależności od zestawu narzędzi i procesu wdrażania, możesz chcieć generować tabele translacji bezpośrednio z podstawowych w ramach kompilacji bazy danych. Możesz też użyć widoków, aby zapewnić wygodną, ​​„w pełni przetłumaczoną” wersję tabeli podstawowej.

Ciekawym pytaniem jest, jaki język jest używany w kolumnach w Products i czy mogą być używane bezpośrednio, gdy nie jest wymagane tłumaczenie. Moja sugestia byłaby taka, że ​​cały kod produkcyjny powinien przekazywać parametr języka i pobierać tekst z ProductsTranslations tylko stół, nawet w języku angielskim (lub jakimkolwiek języku używanym w firmie). W ten sposób możesz mieć pewność, że wszystkie „oficjalne” nazwy znajdują się w tej samej tabeli, a kolumny w tabeli bazowej są dostępne dla przejrzystości i kompletności modelu danych, a także wygody programisty i (ewentualnie) użytku wewnętrznego w trybie ad hoc raporty i tak dalej.




  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 Porównaj zmienną varchar z inną zmienną varchar

  2. Jak zmodyfikować zmienną w SSIS?

  3. Zaktualizuj, jeśli nazwa istnieje, w przeciwnym razie wstaw - w SQL Server

  4. Jak wyświetlić CAŁY tekst z ntext lub nvarchar(max) w SSMS?

  5. Jak używać zmiennej SQL do iterowania węzłów XML