Jaki jest najlepszy sposób na stworzenie wielojęzycznej bazy danych? Aby utworzyć zlokalizowaną tabelę dla każdej tabeli komplikuje projektowanie i zapytania, w innym przypadku dodanie kolumny dla każdego języka jest proste, ale nie dynamiczne, pomóż mi zrozumieć, co jest najlepszym wyborem dla aplikacji korporacyjnych
sql
database
database-design
Arsen Mkrtchyan
źródło
źródło
Odpowiedzi:
To, co robimy, polega na utworzeniu dwóch tabel dla każdego obiektu wielojęzycznego.
Np. Pierwsza tabela zawiera tylko dane neutralne językowo (klucz podstawowy itp.), A druga tabela zawiera jeden rekord dla każdego języka, zawierający zlokalizowane dane oraz kod ISO języka.
W niektórych przypadkach dodajemy pole DefaultLanguage, abyśmy mogli wrócić do tego języka, jeśli nie są dostępne zlokalizowane dane dla określonego języka.
Przykład:
Dzięki takiemu podejściu możesz obsługiwać tyle języków, ile potrzeba (bez konieczności dodawania dodatkowych pól dla każdego nowego języka).
Aktualizacja (14.12.2014): zapoznaj się z tą odpowiedzią , aby uzyskać dodatkowe informacje na temat implementacji używanej do ładowania danych wielojęzycznych do aplikacji.
źródło
id
: D. Aby wyjaśnić, każdyid
reprezentuje znaczenie, do którego możesz dołączyć słowa z dowolnego języka w tabeli relacyjnej, więc otrzymujesz dwie tabele,meaning
(id) iword
(id, mean_id),id
wword
tabeli reprezentuje słowo id, aid
wmeaning
reprezentuje znaczenie, które jest uniwersalne.Polecam odpowiedź wysłaną przez Martina.
Ale wydaje ci się, że martwisz się, że twoje zapytania stają się zbyt złożone:
Być może myślisz, że zamiast pisać proste zapytania takie jak to:
... musisz zacząć pisać takie zapytania:
Niezbyt ładna perspektywa.
Ale zamiast robić to ręcznie, należy opracować własną klasę dostępu do bazy danych, która wstępnie analizuje kod SQL zawierający specjalne znaczniki lokalizacji i konwertuje go na rzeczywisty kod SQL, który należy wysłać do bazy danych.
Korzystanie z tego systemu może wyglądać mniej więcej tak:
I jestem pewien, że możesz to zrobić jeszcze lepiej.
Kluczem do sukcesu jest równomierne nazwanie tabel i pól.
źródło
Uważam, że tego rodzaju podejście działa dla mnie:
Tabela ProductDetail zawiera wszystkie tłumaczenia (dla nazwy produktu, opisu itp.) W językach, które chcesz obsługiwać. W zależności od wymagań aplikacji możesz chcieć rozbić tabelę kraju, aby używać także języków regionalnych.
źródło
Używam następnego podejścia:
Produkt
ProductID OrderID, ...
Informacje o produkcie
ProductID Tytuł Nazwa LanguageID
Język
LanguageID Nazwa Kultura, ....
źródło
Rozwiązanie Martina jest bardzo podobne do mojego, ale jak poradziłbyś sobie z domyślnymi opisami, gdy pożądane tłumaczenie nie zostało znalezione?
Czy wymagałoby to instrukcji IFNULL () i kolejnej instrukcji SELECT dla każdego pola?
Tłumaczenie domyślne byłoby przechowywane w tej samej tabeli, gdzie flaga taka jak „isDefault” wskazuje, czy opis ten jest opisem domyślnym, na wypadek gdyby nie znaleziono żadnego dla bieżącego języka.
źródło