Tôi biết hầu hết mọi người sử dụng cách tiếp cận bên dưới và tạo bảng dịch cho bảng cụ thể cần bản dịch nhưng điều này có thể dẫn đến tải bảng.Dịch ngôn ngữ cho các bảng
CREATE TABLE Product
(
Product_id
,ProductTrans_id -- FK
)
CREATE TABLE ProductTranslation
(
ProductTrans_id
,Product_id
,Name
,Descr
,lang_code
)
Phương pháp dưới đây có thể thực hiện được không? Giả sử bạn có nhiều bảng có nhiều hơn 1 cột cần dịch. Bạn có thể làm như sau nad giữ tất cả các bản dịch trong 1 bảng? Tôi cho rằng cái bàn này sẽ phát triển rất lớn theo thời gian.
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)
)
Vì vậy, sử dụng phương pháp thứ hai bạn sẽ nhận được các văn bản như vậy
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
Cách tiếp cận thứ 2 có vẻ như rất nhiều chi phí và sẽ liên quan đến nhiều lần tìm nạp cột dịch của một sản phẩm duy nhất .. Nếu tôi hiểu chính xác ..? 1 vì nó là một câu hỏi hay! –
Tôi đoán một cách tiếp cận tốt sẽ là đầu tiên xem xét các truy vấn của bạn sẽ trông như thế nào .. sẽ yêu cầu thiết kế bảng –
Trong phương pháp thứ 2 bạn có thể lọc trên TableName và ColumnName và sau đó liên kết thông qua table_row_id. Có thể truy vấn chậm. Chỉ cần suy nghĩ về một cách để làm điều này mà không đòi hỏi một sự thay đổi lược đồ khi một bản dịch là cần thiết cho một bảng mới hoặc cột, vv – davey