Wiem, że większość osób korzysta z poniższego podejścia i tworzy tabelę tłumaczeń dla konkretnej tabeli, która wymaga tłumaczeń, ale może to stanowić obciążenie tabel.Tłumaczenie języków dla tabel
CREATE TABLE Product
(
Product_id
,ProductTrans_id -- FK
)
CREATE TABLE ProductTranslation
(
ProductTrans_id
,Product_id
,Name
,Descr
,lang_code
)
Czy poniższe podejście byłoby wykonalne? Załóżmy, że masz wiele tabel, w których wymaga więcej niż jedna kolumna. Czy możesz wykonać następujące czynności i zachować wszystkie tłumaczenia w 1 tabeli? Przypuszczam, że ten stół z czasem powiększyłby się ogromnie.
CREATE TABLE translation_entry (
translation_id int,
language_id int,
table_name nvarchar(200),
table_column_name nvarchar(200),
table_row_id bigint,
translated_text ntext
)
CREATE TABLE translation_language (
id int,
language_code CHAR(2)
)
Więc korzystając z drugiego podejścia byś uzyskać tekst podobnie jak
select
product.name
,translation_entry.translated_text
from product
inner join translation_entry on product.product_id = translation_entry.table_row_id
and translation_entry.table_name = 'Product' and translation_entry.table_column_name = 'Name'
and language_id = 3
Drugie podejście wydaje się dużo narzutów i będzie wiązało się z wieloma pobraniami dla uzyskania przetłumaczonych kolumn jednego produktu. Jeśli zrozumiałem to poprawnie ...? +1, bo to dobre pytanie! –
Sądzę, że dobrym podejściem byłoby najpierw zastanowić się, jak będą wyglądać twoje zapytania. To będzie wymagało projektowania tabeli. –
W drugim podejściu możesz filtrować na TableName i ColumnName, a następnie link przez table_row_id. Może powolne wysyłanie zapytań. Wystarczy pomyśleć o sposobie wykonania tego, który nie wymaga zmiany schematu, gdy potrzebne jest tłumaczenie dla nowej tabeli lub kolumny itp. – davey