powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Foreign Key. Как лучше реализовать?
2 сообщений из 2, страница 1 из 1
Foreign Key. Как лучше реализовать?
    #39827434
Druid8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Нужна помощь опытных.

Есть таблица Classes, в ней будет определенный данные и ГЛАВНОЕ в ней нужен ПЕРЕВОД. То есть можно сделать по самому примитивному варианту, создать колонки "nameRU", "nameEN" и т.д.

Я решил попробовать через SQLite и привязку к другой таблице Localization по Foreign Key.

Таблица Localization примитивная, есть ключ и колонки RU EN ....
То есть это большой список ключей и переводов, а на неё типа ссылаются другие таблицы.

Тут важно учесть что в таблице Classes, есть 4!! колонки которые нужно локализовать. То есть при запросе придется делать 4 JOINT к Localization и получать для каждой из 4 колонок перевод....

Как бы сделали вы? Речь именно про SQLite и про перевод колонок таблицы.
...
Рейтинг: 0 / 0
Foreign Key. Как лучше реализовать?
    #39827452
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Druid8,

Можно попробовать такую схему, если не хочется много джойнов писать. Каждая запись со своим переводом хранится в таблице ресурсов и кодом языка. ID ресурса и код языка составляют первичный ключ. В основной таблице будет хранить ID этого ресурса, а в выборке будем подставлять код языка, который потребуется. FK тут уже нормально построить не получится...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
create table resources (
    id           integer, 
    language     text, 
    name         text, 
    surname      text,
    patronymic   text,
    primary key (id, language),
    constraint chk_language check(language in ('RU', 'EN', 'UA'))
);

create table classes(
    id         integer primary key, 
    fio_res_id integer, 
    age        integer, 
    phone      text
);

insert into classes(id, fio_res_id, age, phone) values(1, 1, 5, '88888');
insert into classes(id, fio_res_id, age, phone) values(1, 2, 36, '99999');
insert into resources(id, language, name, surname, patronymic) values(1, 'EN', 'Ivan', 'Ivanov', 'Ivanovich');
insert into resources(id, language, name, surname, patronymic) values(1, 'RU', 'Иван', 'Иванов', 'Иванович');
insert into resources(id, language, name, surname, patronymic) values(1, 'UA', 'Iван', 'Iванов', 'Iванович');
insert into resources(id, language, name, surname, patronymic) values(2, 'EN', 'Petr', 'Petrov', 'Petrovich');
insert into resources(id, language, name, surname, patronymic) values(2, 'RU', 'Петр', 'Петров', 'Петрович');
insert into resources(id, language, name, surname, patronymic) values(2, 'UA', 'Пэтро', 'Пэтров', 'Пэтрович');



Выбираем строки

Код: sql
1.
2.
3.
select c.id, r.surname, r.name, r.patronymic, c.age, c.phone
from classes c
inner join resources r on r.id = fio_res_id and r.language = 'RU' 



Результат

idsurnamenamepatronymicagephone1ИвановИванИванович25888882ПетровПетрПетрович3699999
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Foreign Key. Как лучше реализовать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]