LINUX.ORG.RU

Подскажите по структуре


0

0

Задача такая: есть объект, некоторые поля (назовём их сложными) которого могут быть переведены на некоторое количество языков, и хранится будет несколько версий их содержимого. Думаю, как это лучше сделать.

Вижу два варианта:

1) На каждый такой объект в БД иметь одну запись, а в сложные поля записывать XML вида:

<data lang="ru">
  <content ver="1">
    text1
  </content>
  <content ver="2">
    text2
  </content>
</data>

Ну и потом парсить при сохранении/чтении содержимого.

2) Для каждого объекта имеем ряд записей, каждая из которых содержит свою версию текста, т.е. для вышеприведённого примера это будет две строки, если будут другие переводы — то строк будет больше. В этом случае надо ещё продумать механизм, как определять, что разные записи относятся к одному объекту.

Собственно вопрос — как это лучше сделать? По сути тут надо выбрать — либо простой способ работы с БД, но проблемы с парсингом в программе, либо сложные связи в БД и простой доступ к содержимому.

★★★★★

Конечно, принимаются и другие варианты.

roy ★★★★★
() автор топика

я бы выбрал сложные связи в БД. хотя, выбор больше зависит от специфики проекта.

VladimirMalyk ★★★★★
()

+1
Структура может быть такой:

Таблица 1: t_objects 

oid | name 
----------
1   | obj1
2   | obj2
3   | obj3

Таблица 2: t_versions

vid | oid | version_name | value
---------------------------------
1   | 1   | 1.0          |  a
2   | 1   | 1.1          |  b
3   | 1   | 1.2          |  c
4   | 2   | 1.0          |  aaa
5   | 2   | 2.0          |  bbb

aydar ★★★★★
()

Мне кажется, если какие-то строки в бд должны иметь переводы, эти строки должны храниться в словарях. Словари можно сделать в виде двух таблиц: таблица словарей и таблица словарных статей. Таблица словарей содержит два поля: номер словаря и название словаря. Таблица словарных статей содержит четыре поля: номер словаря, номер словарной статьи внутри словаря, номер языка, текст словарной статьи на этом языке. В других таблицах, где требуется иметь поле с переводом, в поле хранится не текст, а номер статьи (а в документации к этому полю указывается, что поле словарное, номер словаря такой-то). При отображении таблицы со словарными полями (в форме, гриде или веб-странице), известен номер языка пользователя; его надо использовать, чтобы подджойнить из таблицы словарных статей статью из нужного словаря с нужным номером и языком.

Можно обойтись и одной таблицей словарных статей. Сказать, что словарь с номером 1 -- это словарь названий словарей. А словарь с номером 2 -- словарь названий языков. Тогда поля номер словаря и номер языка этой таблицы можно считать словарными.

iliyap ★★★★★
()

Спасибо за советы, на счёт словаря идея понравилась, но пока не могу её полностью асилить :) Буду думать.

roy ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.