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.