шаблон проектирования БД для динамической многоязычной структуры данных - PullRequest
3 голосов
/ 23 ноября 2010

Я сделал это несколькими разными способами. Я хотел бы знать, есть ли хороший образец для этого.

Система имеет динамический контент. Таким образом, не только объем данных и сами данные являются динамическими (количество (строк)), но и число полей также является динамическим. Таким образом, в блоге может быть 10 полей, которые нужно перевести, но в элементе корзины покупок есть 5.

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

Это изящно, но я не могу обновить представления, потому что, когда несколько объединений ссылаются на одну и ту же таблицу, это не обновляется (MySQL). Тогда, возможно, есть гораздо лучшие способы сделать это.

Есть ли лучший дизайн? Каковы некоторые из общих шаблонов проектирования, используемых в этой ситуации?

1 Ответ

1 голос
/ 20 марта 2011
  • Entity FieldTypes ( ID , Имя )
  • Entity Поля ( ID, Имя , FieldType )
  • Entity FieldValues ​​ ( ID , CollectionID , Поле , Значение )
  • Сущность Содержимое ( ID , Поля , Данные )
  • Сущность i18n ( ID , Поле , LanguageID , Значение )

Пример:

insert into FieldTypes('S', 'string');
insert into FieldTypes('DT', 'date/time');

insert into Fields(1, 'Author', 'S');
insert into Fields(2, 'Created', 'D');

insert into i18n(1, 1, 'en', 'Author');
insert into i18n(2, 1, 'ru', 'Автор');
insert into i18n(3, 2, 'en', 'Created');
insert into i18n(4, 2, 'ru', 'Создано');

insert into Content(1, 2, 'Test data');
insert into FieldValues(3, 2, 1, 'Tester');
insert into FieldValues(4, 2, 2, '2011-03-20T12:20:00');

/* Display content fields in the user language */ 
select c.ID, f.ID, i.Value as FieldName, fv.Value as FieldValue
from Content c, FieldValues fv, Fields f, i18n i
where c.Fields = fv.CollectionID
  and fv.Field = i.Field
  and i.LanguageID = :UserLanguage
  and c.ID = :ContentID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...