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

Phương pháp hay nhất để lưu trữ các chuỗi đa ngôn ngữ

Trước tiên, hãy đảm bảo rằng ngôn ngữ cơ sở dữ liệu có thể giao dịch với các ngôn ngữ khác nhau. Sử dụng mã hóa máy chủ UTF-8. Tùy chọn đặt LC_COLLATE = 'C' trung lập hoặc sử dụng đối chiếu cho ngôn ngữ đầu tiên của bạn để có thứ tự sắp xếp mặc định. Bắt đầu bằng cách đọc chương Hỗ trợ đối chiếu trong sách hướng dẫn.

Tôi thực sự khuyên bạn nên sử dụng phiên bản PostgreSQL mới nhất (9.1 tại thời điểm viết bài) vì nó có hỗ trợ đối chiếu vượt trội.

Đối với cấu trúc bảng :giữ cho nó đơn giản. Có vẻ như có một số lượng ngôn ngữ cố định thấp cần giải quyết. Sau đó, bạn chỉ có thể có một cột cho mỗi ngôn ngữ:

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

Điều này khá hiệu quả, ngay cả với nhiều ngôn ngữ. Bộ nhớ NULL rất rẻ.
Nếu bạn có nhiều ngôn ngữ khác nhau cần xử lý, một bảng riêng biệt có thể là giải pháp tốt hơn. Giải pháp này giả định rằng bạn có "ngôn ngữ chính", nơi chuỗi luôn hiện diện:

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

Hoặc, nếu viết tắt (hai chữ cái) là đủ, chỉ cần tạo enum để xác định ngôn ngữ.

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

Không coi ngôn ngữ chính là đặc biệt và giữ tất cả các biến thể ngôn ngữ trong cùng một bảng có thể giúp việc xử lý trong ứng dụng của bạn đơn giản hơn. Nhưng nó thực sự phụ thuộc vào yêu cầu của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tạo cơ sở dữ liệu mới bằng cách sử dụng pgadmin4

  2. Ghi chú về Chỉ mục B-Tree PostgreSQL

  3. Tạo danh sách tất cả các ngày mỗi tháng và chia đều giá trị cho mỗi ngày

  4. Làm cách nào để chèn dấu thời gian với múi giờ trong postgresql với câu lệnh đã chuẩn bị?

  5. Bản ghi điểm kiểm tra chính không hợp lệ của Docker postgres