Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Terjemahan Bahasa untuk Tabel

Saya tidak yakin mengapa Anda mengkhawatirkan jumlah tabel:memiliki lebih sedikit tabel tidak secara otomatis berarti database Anda lebih kecil, lebih efisien, atau didesain lebih baik. Terutama jika mengurangi jumlah tabel meningkatkan kompleksitas kueri Anda, saya akan sangat berhati-hati dalam melakukannya.

Bagaimanapun, saya akan memilih satu tabel terjemahan per tabel 'dasar'. Alasan utamanya adalah solusi kedua Anda tidak fleksibel:jika kunci utama bukan bilangan bulat tunggal, maka itu menjadi sangat sulit untuk diterapkan dan digunakan. Meminta terjemahan juga lebih rumit, dan bergantung pada ukuran tabel dan data, mungkin sulit untuk mengindeksnya secara efektif.

Tidak jelas mengapa Anda memiliki TranslationID pada Products meja; biasanya hubungannya sebaliknya:

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

Bergantung pada perangkat dan proses penerapan Anda, Anda mungkin ingin membuat tabel terjemahan langsung dari tabel dasar sebagai bagian dari pembuatan database Anda. Dan Anda dapat menggunakan tampilan untuk menyediakan versi tabel dasar yang nyaman dan 'diterjemahkan sepenuhnya'.

Satu pertanyaan menarik adalah bahasa apa yang digunakan untuk kolom di Products dan jika mereka dapat digunakan secara langsung ketika tidak diperlukan terjemahan. Saran saya adalah semua kode produksi harus melewati parameter bahasa dan mengambil teks dari ProductsTranslations tabel saja, bahkan untuk bahasa Inggris (atau apa pun bahasa internal perusahaan Anda). Dengan begitu Anda dapat yakin bahwa semua nama 'resmi' ditemukan di tabel yang sama, dan kolom pada tabel dasar ada untuk kejelasan dan kelengkapan model data serta kenyamanan pengembang dan (mungkin) penggunaan internal pada ad hoc laporan dan sebagainya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kunci Asing ke kunci non-primer

  2. DATEADD() Contoh di SQL Server

  3. Cara Mendapatkan Nilai Kolom Identitas tanpa Menyebutkan Nama Kolom Identitas di Pilih - Tutorial SQL Server / T-SQL Part 46

  4. SQL Server:Tidak dapat memasukkan nilai eksplisit ke dalam kolom stempel waktu

  5. Cari "seluruh kata yang cocok" dengan pola SEPERTI SQL Server