Ich weiß, dass die meisten Leute den folgenden Ansatz verwenden und eine Übersetzungstabelle für die spezifische Tabelle erstellen, die Übersetzungen benötigt, aber dies kann zu einer Last von Tabellen führen.Sprachübersetzung für Tabellen
CREATE TABLE Product
(
Product_id
,ProductTrans_id -- FK
)
CREATE TABLE ProductTranslation
(
ProductTrans_id
,Product_id
,Name
,Descr
,lang_code
)
Wäre der folgende Ansatz machbar? Angenommen, Sie haben viele Tabellen, in denen mehr als eine Spalte übersetzt werden muss. Könnten Sie folgendes tun und alle Übersetzungen in einer Tabelle behalten? Ich nehme an, dass dieser Tisch im Laufe der Zeit enorm an Größe zunehmen würde.
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)
)
den zweiten Ansatz So verwenden Sie würde den Text wie erhalten so
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
Der zweite Ansatz scheint wie viel Overhead und wird mehrere Fetches für die übersetzten Spalten eines einzelnen Produkts beinhalten .. Wenn ich es richtig verstanden ..? +1, wie es eine gute Frage ist! –
Ich denke, ein guter Ansatz wäre, zuerst zu überlegen, wie Ihre Abfragen aussehen .. das wird die Tabelle Design –
In der zweiten Ansatz können Sie filtern nach TableName und ColumnName und dann über table_row_id verknüpfen. Vielleicht langsame Abfrage. Denken Sie nur an einen Weg, dies zu tun, der keine Schemaänderung erfordert, wenn eine Übersetzung für eine neue Tabelle oder Spalte usw. benötigt wird. – davey