Apa cara terbaik untuk membuat basis data multi-bahasa? Untuk membuat tabel terlokalisasi untuk setiap tabel membuat desain dan kueri kompleks, dalam kasus lain menambahkan kolom untuk setiap bahasa adalah sederhana tetapi tidak dinamis, tolong bantu saya untuk memahami apa yang terbaik untuk memilih aplikasi perusahaan
sql
database
database-design
Arsen Mkrtchyan
sumber
sumber
Jawaban:
Apa yang kami lakukan adalah membuat dua tabel untuk setiap objek multibahasa.
Misalnya, tabel pertama hanya berisi data netral-bahasa (kunci utama, dll.) Dan tabel kedua berisi satu catatan per bahasa, yang berisi data yang dilokalkan plus kode ISO bahasa tersebut.
Dalam beberapa kasus kami menambahkan bidang DefaultLanguage, sehingga kami dapat kembali ke bahasa itu jika tidak ada data yang dilokalkan tersedia untuk bahasa yang ditentukan.
Contoh:
Dengan pendekatan ini, Anda dapat menangani bahasa sebanyak yang diperlukan (tanpa harus menambahkan bidang tambahan untuk setiap bahasa baru).
Pembaruan (2014-12-14): silakan lihat jawaban ini , untuk beberapa informasi tambahan tentang implementasi yang digunakan untuk memuat data multibahasa ke dalam suatu aplikasi.
sumber
id
: D. Untuk menjelaskan, masing-masingid
mewakili makna di mana Anda dapat melampirkan kata-kata dari bahasa apa pun di tabel relasional, sehingga Anda mendapatkan dua tabel,meaning
(id) danword
(id, meaning_id),id
diword
tabel mewakili kata id,id
dimeaning
mewakili makna yang universal.Saya merekomendasikan jawaban yang diposting oleh Martin.
Tetapi Anda tampaknya khawatir bahwa pertanyaan Anda menjadi terlalu rumit:
Jadi Anda mungkin berpikir, bahwa alih-alih menulis pertanyaan sederhana seperti ini:
... Anda harus mulai menulis pertanyaan seperti itu:
Bukan perspektif yang sangat cantik.
Tetapi alih-alih melakukannya secara manual, Anda harus mengembangkan kelas akses basis data Anda sendiri, yang melakukan pra-parsing SQL yang berisi markup lokalisasi khusus Anda dan mengubahnya menjadi SQL aktual yang perlu Anda kirim ke database.
Menggunakan sistem itu mungkin terlihat seperti ini:
Dan saya yakin Anda bisa melakukan itu lebih baik lagi.
Kuncinya adalah membuat tabel dan bidang Anda dinamai secara seragam.
sumber
Saya menemukan jenis pendekatan ini bekerja untuk saya:
Tabel ProductDetail menampung semua terjemahan (untuk nama produk, deskripsi dll.) Dalam bahasa yang ingin Anda dukung. Bergantung pada persyaratan aplikasi Anda, Anda mungkin ingin memecah tabel Negara untuk menggunakan bahasa daerah juga.
sumber
Saya menggunakan pendekatan berikutnya:
Produk
ProductID OrderID, ...
Info produk
ProductID Judul Nama LanguageID
Bahasa
LanguageID Nama Budaya, ....
sumber
Solusi Martin sangat mirip dengan solusi saya, namun bagaimana Anda menangani deskripsi default ketika terjemahan yang diinginkan tidak ditemukan?
Apakah itu memerlukan IFNULL () dan pernyataan SELECT lain untuk setiap bidang?
Terjemahan default akan disimpan dalam tabel yang sama, di mana bendera seperti "isDefault" menunjukkan apakah deskripsi tersebut adalah deskripsi default jika tidak ada yang ditemukan untuk bahasa saat ini.
sumber