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.