Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Локализация данных в БД, Как лучше реализовать локализацию в БД 
:(
    Опции темы
dimqw31
Дата 29.10.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.10.2010

Репутация: нет
Всего: нет



Допустим у меня приложение разрабатывается для трех языков
Как лучше организовать БД для лучшей гибкости, производительности при запросах..
В одной таблице иметь несколько колонок с разными переводами элементов данных или для каждого языка сделать свою БД?
Или другие какие есть способы или  паттерны,
PM MAIL   Вверх
Frees
Дата 29.10.2010, 13:02 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 2
Всего: 54



Цитата(dimqw31 @  29.10.2010,  15:54 Найти цитируемый пост)
В одной таблице иметь несколько колонок с разными переводами элементов данных

точно нет!

в таблице иметь несколько записей одного и того же текста на разных языках

ID |LANG_ID |DATA
1    1              Черновик
1    2              Draft
2    1              Завершен
2    2              Complete

LANG_ID |LANG
1              Ру
2              En
 
или

иметь набор скриптов с UPDATE который будет изменять данные на  другой язык
для каждого языка свой скрипт


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 7.11.2010, 20:50 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 3
Всего: 329



Может иметь три набора одинаковых таблиц? А потом представлениями или процедурами выбирать нужные данные? В процедуру можно передавать как параметр код языка.
PM MAIL   Вверх
_Y_
Дата 8.11.2010, 14:38 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Если каждое слово/фраза должно присутствовать в переводе на все языки, то вполне подойдет таблица с отдельной колонкой на каждый язык:
Код

|RUS      |ENG      |UKR      |SWE      |
|цветы    |flowers  |квитки   |blommor  |

Я так делал длал для несколькоязычных вебсайтов. В этом случае поиск чрезвычайно прост, но в программе приходится жестко прописывать соотношение язык - колонка таблицы. Если же переводы между языками случайны или, например, языки это тоже объект хранения БД (например языки можно добавлять и удалять), то делать надо как сказал Frees 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akella
Дата 13.11.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 3
Всего: 329



_Y_, в твоём случае нужно будет постоянно строить запросы динамически. Т.е. жёстко в наборе данных не пропишешь запрос, как это часто мы делаем. Да и в моём случае тоже. Наверное самый лучший вариант будет тот, который предложил уважаемый Frees  smile 
PM MAIL   Вверх
Frees
Дата 13.11.2010, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 2
Всего: 54



Цитата(Akella @  13.11.2010,  15:42 Найти цитируемый пост)
Наверное самый лучший вариант будет тот, который предложил уважаемый Frees

там тоже проблем не мало например с первичными ключами, усложнение запросов (потенциальные ошибки).

или Вы про второй вариант - скрипт переводящий БД... 

я бы скриптом сделал.


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Zloxa
Дата 13.11.2010, 21:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



А вообще.... языковые настройки презентационного слоя хранить в персистентных данных.... 
Это только для меня нелепо звучит?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akella
Дата 13.11.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 3
Всего: 329



Цитата(Frees @  13.11.2010,  14:10 Найти цитируемый пост)
там тоже проблем не мало например с первичными ключами, усложнение запросов (потенциальные ошибки).

Ну легче ж просто передать значение значение нужного языка в параметр
Код

select 
...
where lang_id = :lang


Код

constRussian = 0;
...
...
...
FibDataSet1.paramByName('lang').AsInteger := constRussian;//


Добавлено через 1 минуту и 30 секунд
Вообще можно в каком-нибудь событии у компонента подключения к базе определять запрос или датасет и автоматически добавлять условие where lang_id = :lang

Добавлено через 2 минуты и 37 секунд
Цитата(Zloxa @  13.11.2010,  21:51 Найти цитируемый пост)
А вообще.... языковые настройки презентационного слоя хранить в персистентных данных.... 
Это только для меня нелепо звучит? 

где, где? можно по-русски? без "американщины", так сказать  smile  Мы ж славяне!!!! а не американцы smile
PM MAIL   Вверх
Frees
Дата 13.11.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 2
Всего: 54



Цитата(Akella @  14.11.2010,  00:58 Найти цитируемый пост)
Ну легче ж просто передать значение значение нужного языка в параметр

первичный ключ составной надо будет делать...


Цитата(Zloxa @  14.11.2010,  00:51 Найти цитируемый пост)
А вообще.... языковые настройки презентационного слоя хранить в персистентных данных.... Это только для меня нелепо звучит?


Для меня это звучит непонятно..))


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Zloxa
Дата 13.11.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(Akella @  13.11.2010,  21:58 Найти цитируемый пост)
где, где? можно по-русски? без "американщины", так сказать    Мы ж славяне!!!! а не американцы

Я очень долго думал над тем, как это сказать по русски, прежде чем сдался и использовал этот американизм :(

Это сообщение отредактировал(а) Zloxa - 13.11.2010, 22:11


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Frees
Дата 13.11.2010, 22:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 2
Всего: 54



Цитата(Akella @  14.11.2010,  00:58 Найти цитируемый пост)
Вообще можно в каком-нибудь событии у компонента подключения к базе определять запрос или датасет и автоматически добавлять условие where lang_id = :lang



можно для таких переводимых таблиц сделать view которая сама будет это условие языка (lang_id = :lang) учитывать а текущий lang_id хранить отдельно где то в БД в некой таблице настроек (это помоему и есть "настройки презентационного слоя хранить в персистентных данных")

Это сообщение отредактировал(а) Frees - 13.11.2010, 22:22


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Zloxa
Дата 14.11.2010, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(Frees @  13.11.2010,  22:11 Найти цитируемый пост)
это помоему и есть

Не, я не то имел в виду. Хотя это тоже оно smile
Я малость подзагнался, спроецировал свою задачу, хотя не факт что она имеет место быть у ТС. 

На неделе ковырял локализацию ORMS. Они лаблы форм, значения листов, комбо и пр. слили в базу и, при инициализации формы, в зависимости от языка пользователя, подтягивали нужные.
Мне показалось это не совсем кошерным. Совсем не кошерным.
Тот самый случай, когда настройка(конфигурация) ГУЯ слита в базу. Мне кажется это не лучшая практика. Я понимаю что это все от бедности, и пытаюсь приучить себя к мысле что это нормально. Но пока у меня получается плохо. Хранить в базе конфиг гуя, мне видится абсурдным. Слой данных должен быть абстрагирован от презентативного слоя. ИМХО. В смысле что не важно на чем у нас клиент. На формсах, пыхапы, жаве, делфе, или же вообще нет-  на структуру и состав данных это влиять не должно и баста.

Твое предложение с вьюхой сродни этому. Я не отрицаю практического удобства такого подхода. Напротив. Это очень удобно. Однако же с точки зрения "философии" визуализация это исключительно задача клиента, а корректное отображения языка это задача визуализации.

Это сообщение отредактировал(а) Zloxa - 14.11.2010, 03:29


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Frees
Дата 14.11.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 2
Всего: 54



Я думаю, надо разделять 2 уровня локализации:
1 - локализация текстов у Label на формах клиента;
2 - локализация названий сущностей БД или их атрибутов.

первое хранить в БД это противоречит "философии" а второе очень даже не противоречит

Но проще реализовать один общий механизм, поэтому тексты Label и попадают в БД.





--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Zloxa
Дата 15.11.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(Frees @  14.11.2010,  22:18 Найти цитируемый пост)
разделять 2 уровня локализации

В том то и проблема, что, если с первым, описанным тобой случаем, я имею дело весьма регулярно, то со вторым - еще ни разу не доводилось сталкивался, хотя таки допускаю что подобные задачи имеют место быть.
Именно узость моего кругозора и мешает мне допустить что проблема описанная ТС действительно должна решаться средствами БД.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akella
Дата 21.11.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 3
Всего: 329



А если на момент запуска программы не будет подключения к базе (сбой и т.д.), то что тогда? Все сообщения об ошибках и окна программы будут как выглядеть?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1087 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.