PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Praktik terbaik untuk menyimpan string multibahasa

Pertama-tama pastikan bahwa lokal basis data dapat menangani berbagai bahasa. Gunakan pengkodean server UTF-8. Secara opsional, atur LC_COLLATE = 'C' berada di tempat netral atau menggunakan susunan untuk bahasa pertama Anda untuk memiliki urutan pengurutan default. Mulailah dengan membaca bab Dukungan Pengumpulan dalam manual.

Saya sangat menyarankan agar Anda menggunakan PostgreSQL versi terbaru (9.1 pada saat penulisan) karena memiliki dukungan pemeriksaan yang unggul.

Adapun struktur tabel :tetap sederhana. Sepertinya ada sedikit bahasa yang harus ditangani. Anda cukup memiliki kolom untuk setiap bahasa:

CREATE TABLE txt (
  txt_id serial PRIMARY KEY
 ,txt    text NOT NULL -- master language NOT NULL?
 ,txt_fr text -- others can be NULL?
 ,txt_es text
 ,txt_de text
);

Ini cukup efektif, bahkan dengan banyak bahasa. Penyimpanan NULL sangat murah.
Jika Anda memiliki sejumlah bahasa yang berbeda untuk ditangani, tabel terpisah mungkin merupakan solusi yang lebih baik. Solusi ini mengasumsikan bahwa Anda memiliki "bahasa master", di mana string selalu ada:

CREATE TABLE txt (
  txt_id serial PRIMARY KEY
 ,txt    text NOT NULL -- master language NOT NULL?
);

CREATE TABLE lang (
  lang_abbr text PRIMARY KEY -- de, es, fr, ...
 ,lang      text NOT NULL
 ,note      text
);

Atau, jika singkatan (dua huruf) sudah cukup, buat saja enum ketik untuk mengidentifikasi bahasa.

CREATE TABLE txt_trans (
  txt_id    int REFERENCES txt(txt_id) ON UPDATE CASCADE ON DELETE CASCADE
 ,lang_abbr text REFERENCES lang(lang_abbr) ON UPDATE CASCADE
 ,txt       text NOT NULL -- master language NOT NULL?
 ,CONSTRAINT txt_trans_pkey PRIMARY KEY (txt_id, lang_abbr)
);

Tidak memperlakukan bahasa master khusus dan menyimpan semua varian bahasa dalam tabel yang sama dapat membuat penanganan di aplikasi Anda menjadi lebih sederhana. Tapi itu sangat tergantung pada kebutuhan Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengembalikan beberapa nilai SERIAL dari sisipan batch Posgtres

  2. Mengganti nama beberapa kolom di PostgreSQL

  3. PostgreSQL Upsert dengan klausa WHERE

  4. Pilih baris acak untuk setiap grup

  5. Postgres + Hibernate + Java UUID