Я ищу мнения, если следующая проблема может иметь лучшее / другое / общее решение:
У меня есть база данных продуктов, которая содержит названия продуктов на английском языке (язык по умолчанию для этого приложения), и мне нужны переводы названий, если таковые имеются.
В настоящее время у меня есть эта настройка:
Таблица продуктов
CREATE TABLE products
(
id serial NOT NULL,
"name" character varying(255) NOT NULL,
CONSTRAINT products_pkey PRIMARY KEY (id)
)
и таблица локализации продукта
CREATE TABLE products_l10n
(
product_id serial NOT NULL,
"language" character(2) NOT NULL,
"name" character varying(255) NOT NULL,
CONSTRAINT products_l10n_pkey PRIMARY KEY (product_id, language),
CONSTRAINT products_l10n_product_id_fkey FOREIGN KEY (product_id)
REFERENCES products (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
и я использую следующий запрос для получения списка локализованных продуктов (в данном случае немецкого) с отступлением к английским именам по умолчанию:
SELECT p.id, COALESCE(pl.name, p.name)
from products p LEFT
JOIN products_l10n pl ON p.id = pl.product_id AND language = 'de';
Код SQL написан на диалекте postgres. Данные хранятся в формате UTF-8.