PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Najlepsze praktyki dotyczące przechowywania wielojęzycznych ciągów

Najpierw upewnij się, że lokalizacja bazy danych radzi sobie z różnymi językami. Użyj kodowania serwera UTF-8. Opcjonalnie ustaw LC_COLLATE = 'C' być na neutralnym gruncie lub użyć sortowania dla swojego pierwszego języka, aby mieć domyślną kolejność sortowania. Zacznij od przeczytania rozdziału Obsługa sortowania w instrukcji.

Gorąco sugeruję, abyś używał najnowszej wersji PostgreSQL (w momencie pisania 9.1), ponieważ ma lepszą obsługę sortowania.

Jeśli chodzi o strukturę tabeli :nie komplikuj. Wygląda na to, że istnieje mała, stała liczba języków, z którymi trzeba się uporać. Możesz wtedy mieć po prostu kolumnę dla każdego języka:

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

Jest to całkiem skuteczne, nawet w wielu językach. Pamięć o wartości NULL jest bardzo tania.
Jeśli masz do czynienia z różną liczbą języków, lepszym rozwiązaniem może być oddzielna tabela. To rozwiązanie zakłada, że ​​masz „język główny”, w którym ciąg jest zawsze obecny:

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

Lub, jeśli wystarczy (dwuliterowy) skrót, po prostu utwórz enum wpisz aby zidentyfikować język.

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

Nie traktowanie języka głównego jako specjalnego i utrzymywanie wszystkich wariantów języka w tej samej tabeli może uprościć obsługę w Twojej aplikacji. Ale to naprawdę zależy od Twoich wymagań.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawdzić, czy tablica PostgreSQL zawiera wartość?

  2. Jak wyłączyć wszystkie optymalizacje PostgreSQL

  3. Czy w PostgreSQL można utworzyć tabelę z nazwą zmiennej?

  4. Jak korzystać z dj-database-url podczas łączenia się z postgresql w heroku za pomocą pythona?

  5. Rails 3:błąd migracji podczas używania json jako typu kolumny w ActiveRecord wspieranym przez Postgres