Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Bản dịch ngôn ngữ cho bảng

Tôi không chắc tại sao bạn lại lo lắng về số lượng bảng:có ít bảng hơn không tự động có nghĩa là cơ sở dữ liệu của bạn nhỏ hơn, hiệu quả hơn hoặc được thiết kế tốt hơn. Đặc biệt nếu việc giảm số lượng bảng sẽ làm tăng độ phức tạp của các truy vấn của bạn, tôi sẽ rất cẩn thận khi làm điều đó.

Dù sao, tôi sẽ tìm một bảng dịch cho mỗi bảng 'cơ sở'. Lý do chính là giải pháp thứ hai của bạn không linh hoạt:nếu khóa chính không phải là một số nguyên thì việc triển khai và sử dụng trở nên cực kỳ khó khăn. Việc truy vấn bản dịch cũng phức tạp hơn và tùy thuộc vào kích thước của bảng và dữ liệu, có thể khó lập chỉ mục nó một cách hiệu quả.

Không rõ tại sao bạn có TranslationID trên Products bàn; thường thì mối quan hệ theo chiều ngược lại:

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)
)

Tùy thuộc vào bộ công cụ và quy trình triển khai, bạn có thể muốn tạo các bảng dịch trực tiếp từ các bảng cơ sở như một phần của quá trình xây dựng cơ sở dữ liệu của mình. Và bạn có thể sử dụng các dạng xem để cung cấp phiên bản 'được dịch đầy đủ' thuận tiện của bảng cơ sở.

Một câu hỏi thú vị là ngôn ngữ nào được sử dụng cho các cột trong Products và nếu chúng có thể được sử dụng trực tiếp khi không cần dịch. Đề xuất của tôi là tất cả mã sản xuất phải chuyển một tham số ngôn ngữ và lấy văn bản từ ProductsTranslations chỉ bảng, ngay cả đối với tiếng Anh (hoặc bất kỳ ngôn ngữ nội bộ công ty của bạn là gì). Bằng cách đó, bạn có thể chắc chắn rằng tất cả các tên 'chính thức' đều được tìm thấy trong cùng một bảng và các cột trên bảng cơ sở ở đó để đảm bảo tính rõ ràng và đầy đủ của mô hình dữ liệu cũng như sự thuận tiện của nhà phát triển và (có thể) sử dụng nội bộ trên đặc biệt báo cáo, v.v.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy dữ liệu tháng trước và dữ liệu tháng cho đến nay

  2. SQL INSERT INTO từ nhiều bảng

  3. Sự cố khi đếm tần suất mục trên T-SQL

  4. Tạo một biến tĩnh toàn cục trong SQL Server?

  5. bổ sung ngày tháng trong hàm sql