|
|
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
Коллеги, добрый день! Создаем базу данных на основании EAV-модели. Для сайта с различными каталогами различных объектов. Соответственно, EAV была выбрана, так как нужна гибкая модель данных, и чтобы был один и тот же компонент интерфейса для визуализации. Так вот, сайт нужно сделать многоязычный. Поначалу для трех языков: русский, украинский, английский. Потом, возможно, и для других языков. Соответственно, объекты каталога должны отображаться на том языке, который пользователь выбрал для сайта. Помогите, пожалуйста, спроектировать, как оптимально модифицировать EAV-модель, чтобы она поддерживала многоязычность? Ниже привожу скрипт таблиц: Код: plsql 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. 26. 27. 28. Что нужно: нужно чтобы как конкретные значения полей объекта (Parameter - должность конкретного человека, описание конкретного стула и т.д.) можно было отображать на апп-уровне в зависимости от языка, так и название объектов (Entity) в заголовке каталога, так и название атрибута (например: пол, возраст, описание). Как корректней всего расширить модель данных для поддержки многоязычности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 16:24 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
Добавить справочник языков и из всех таблицы с варчами вынести варчары в дополнительные таблицы М:М с варчарами и айди языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 16:49 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительДобавить справочник языков и из всех таблицы с варчами вынести варчары в дополнительные таблицы М:М с варчарами и айди языка. Хм. То-есть, по одной таблице с варчарами на EntityType, Entity, Attribute и Parameter, или как? И почему связь M:M? У меня в модели данных строки если и будут повторятся, то крайне редко, и я не буду знать, как отсделить, что строка повторяется. Или что Вы имеете в виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 17:03 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
On 03/20/2012 05:24 PM, Vetal wrote: > Помогите, пожалуйста, спроектировать, как оптимально модифицировать EAV-модель, > чтобы она поддерживала многоязычность? Надо добавить в PK таблицы, хранящей текстовые атрибуты, идентификатор языка. У тебя -- в таблицу Parameter, но тут есть проблема, там у тебя хранятся почему-то атрибуты всех типов (или у меня такое впечатление), тогда тебе придётся завести ещё один тип языка -- language neutral -- и ставить его в PK атрибутов нетекстовых типов. Хотя я бы сделал отдельную таблицу для текстовых атрибутов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 17:13 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Хм. То-есть, по одной таблице с варчарами на EntityType, Entity, Attribute и > Parameter, или как? Только одна, LanguageParameter. И почему связь M:M? Потому что он неверно написал. 1:M должно быть. Но если глядеть связь Attribute -- Language, то будет M:N. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 17:15 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
А я вот какое решение придумал: Код: plsql 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 17:40 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
Ой, нажал на Опубликовать случайно без коммента, рука дрогнула :) Идея какая: завести отдельную таблицу ресурсов, и туда ссылаться со всех других таблиц (поля varcharValueId в Parameter и nameId в остальных таблицах). Что Вы думаете про такое решение? Или все же лучше создавать в таблице Parameter разные записи для разных языков? И немного не понятно, как быть с таблицами Entity, EntityType и Attribute в Вашем случае. Ведь в них есть еще куча других нетекстовых полей, которые я не указал, придется их дублировать, а это уже денормализация получается. Как все же быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 17:44 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Идея какая: завести отдельную таблицу ресурсов, и туда ссылаться со всех других > таблиц (поля varcharValueId в Parameter и nameId в остальных таблицах). > Идея не очень , потому как тебе придётся лишнюю таблицу Parameter JOIN-ить для каждого текстового атрибута. Лучше бы просто отдельно хранить текстовые атрибуты, в отдельной таблице для текстовых атрибутов. create table TextParameter( entityId varchar(32) REFERENCES Entity(id), attributeId varchar(32) REFERENCES Attribute(id), langId varchar(32), value varchar(4096) PRIMARY KEY (entityId, attributeId, langId) ); > И немного не понятно, как быть с таблицами Entity, EntityType и Attribute в > Вашем случае. Ведь в них есть еще куча других нетекстовых полей, которые я не > указал, придется их дублировать, а это уже денормализация получается. Как все же > быть? Куда дублировать ? Не понял. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 18:08 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
Имел в виду M:N. Ваша таблица Parameter теряет поле Value Таблица ParameterByLang хранит ключ таблицы Parameter, код языка и значение Value свое для каждого языка Остальные таблицы тако же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 18:17 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
А что, лишний джойн сильно замедлит работу с базой? И еще смущает то, что при этом решении для того, чтобы выбрать все параметры на клиенте (текстовые и нетекстовые), нужно сделать два запроса (типа как операция Union), а не один, хоть и с лишним джойном. Что же все же дешевле выйдет? MasterZiv> И немного не понятно, как быть с таблицами Entity, EntityType и Attribute в > Вашем случае. Ведь в них есть еще куча других нетекстовых полей, которые я не > указал, придется их дублировать, а это уже денормализация получается. Как все же > быть? Куда дублировать ? Не понял. Ну, есть еще таблицы Entity, EntityType и Attribute, описывающие метаданные объектов, у них есть поле name. К примеру, если представить себе каталог компьютеров, то страница компьютера на сайте будет выглядеть так: Код: plaintext 1. 2. "Компьютер" - EntityType "Онитрон 5" - Entity (конкретная модель компьютера) "Процессор", "Тип охлаждения" - Attribute "Core2Duo 2.6Ггц", "жидкий" - Parameter Так вот, EntityType, Entity и Attribute тоже нужно интернационализировать. Только в них есть еще и другие поля. Например, в атрибуте есть его описание для администратора сайта, признак активности, параметры визуализации в интерфейсе, правила форматирования и т.п. Если мы будем дублировать эти записи для таблицы атрибутов, чтобы для каждого языка было свое значение, будет ненормализованность и дублирование остальных атрибутов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 18:26 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительИмел в виду M:N. Ваша таблица Parameter теряет поле Value Таблица ParameterByLang хранит ключ таблицы Parameter, код языка и значение Value свое для каждого языка Остальные таблицы тако же. Ага, понял... А я как раз только что предложил, если Вы видели, создать таблицу Resource, где ресурсы со всех таблиц. Как Вы считаете, какое из наших решений лучше и почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 18:28 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> А что, лишний джойн сильно замедлит работу с базой? Нет, не сильно. > Что же все же дешевле выйдет? Не знаю, я бы вообще отдельно каждый тип атрибута хранил. > Ну, есть еще таблицы Entity, EntityType и Attribute, описывающие метаданные > объектов, у них есть поле name. Ну, это всё остаётся как и было. > Так вот, EntityType, Entity и Attribute тоже нужно интернационализировать. Ааааа. Ну сделай ещё по одной табличке дочерней, с языком. > Только в них есть еще и другие поля. Например, в атрибуте есть его описание для > администратора сайта, признак активности, параметры визуализации в интерфейсе, > правила форматирования и т.п. Если мы будем дублировать эти записи для таблицы > атрибутов, чтобы для каждого языка было свое значение, будет ненормализованность > и дублирование остальных атрибутов. Не, не надо дублировать. В отдельную таблицу надо только текстовые поля выносить. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 18:37 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
MasterZiv> Что же все же дешевле выйдет? Не знаю, я бы вообще отдельно каждый тип атрибута хранил. В разных таблицах? Зачем? Какое преимущество? MasterZiv> Так вот, EntityType, Entity и Attribute тоже нужно интернационализировать. Ааааа. Ну сделай ещё по одной табличке дочерней, с языком. А может, лучше сделать одну табличку на эти таблицы? И в каждой из этих таблиц просто заводить resourceId. Зачем плодить аж три таблицы, вроде так проще? А если вдруг появятся другие таблицы базы данных, которые тоже нужно будет интернационализировать, тоже по табличке на них создавать? Или я все же заблуждаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 18:45 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> В разных таблицах? Зачем? Какое преимущество? > Типизированное поле в таблице. > А может, лучше сделать одну табличку на эти таблицы? И в каждой из этих таблиц > просто заводить resourceId. Зачем плодить аж три таблицы, вроде так проще? А Можно и так. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 19:05 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
MasterZiv > В разных таблицах? Зачем? Какое преимущество? > Типизированное поле в таблице. Так у меня ж тоже типизированные поля: Вот полный текст таблицы: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Чем Ваше решение лучше? Немножко технических данных: EntityType: сотни значений Entity: сотни тысяч, возможно миллионы Attribute: тысячи значений Parameter: миллионы, возможно десятки миллионов значений База данных: postgre9 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 19:16 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
Vetal, не мудрствуй, языков не миллионы, добавь на каждый язык столбец для хранения значения на этом языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 19:26 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
oragrafVetal, не мудрствуй, языков не миллионы, добавь на каждый язык столбец для хранения значения на этом языке. Очень неудобно в таком случае писать слой работы с интернационализацией на апп-уровне. Придется для каждого языка хардкодить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 19:35 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
On 03/20/2012 08:16 PM, Vetal wrote: > Чем Ваше решение лучше? Не знаю, не думал. Но у тебя все поля значений будут NULL. Если по таблице делать на тип значения , в таблицах будут все значения -- NOT NULL. > Немножко технических данных: > EntityType: сотни значений > Entity: сотни тысяч, возможно миллионы > Attribute: тысячи значений > Parameter: миллионы, возможно десятки миллионов значений Это всё равно. Миллион -- не миллиард. Ерунда. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 20:22 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
On 03/20/2012 08:26 PM, oragraf wrote: > не мудрствуй, языков не миллионы, добавь на каждый язык столбец для хранения > значения на этом языке. Вот это -то как раз ни в коем случае нельзя делать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 20:23 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 03/20/2012 08:26 PM, oragraf wrote: > не мудрствуй, языков не миллионы, добавь на каждый язык столбец для хранения > значения на этом языке. Вот это -то как раз ни в коем случае нельзя делать. Интересно так же и Ваше мнение - почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 20:33 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> create table Parameter( > entityId varchar(32) REFERENCES Entity(id), > attributeId varchar(32) REFERENCESAttribute(id), > varcharValue varchar(4096), > textValue text, > integerValue integer, > floatValuefloat, > datetimeValuetimestamp, > booleanValue boolean, > entityValue varchar(32) REFERENCES Entity(id),/* types for list options like computer, person, city , country and so on. */ > PRIMARY KEY (entityId, attributeId) > ); > > > Чем Ваше решение лучше? Вообще, это общий вопрос по EAV, думаю, его рассмотрение можно найти в инете, плюсы и минусы. К твоему изначальному вопросу это не имеет отношение. Но! Если делать такую таблицу, как у тебя, то если пойдёт в PK её LANGUAGE, то ВСЕ атрибуты будут иметь возможность иметь разные языки, а для атрибутов других типов это не нужно. (это не очень страшно, главное правилами какими-то запретить вставку таких данных). Тогда либо для них надо вставлять в PK что -то типа специального идентификатора языка, либо надо тоже выносить varcharValue в подтаблицу с языком в PK. Кроме этого, наверняка тебе захочется создать индексы на разные xxValue, чтобы по ним можно было бы искать. Это уже тонкая материя, тут уже надо знать о конкретике СУБД в реализации, но всё же, для каждого xxxVal в таблице будет N записей (всего атрибутов), из них n будет этого значения, а N-n будет NULL. Это может портить статистику и селективность. А может и не портить. В общем, штука сложная. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 20:35 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Интересно так же и Ваше мнение - почему? Нарушение 1 НФ. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 20:36 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
MasterZivИ почему связь M:M? Потому что он неверно написал. 1:M должно быть. Но если глядеть связь Attribute -- Language, то будет M:N. Я вот подумал. У меня ресурс - уникальное значение. Один ресурс не может быть к разным Entity или Parameter. Поэтому зависимость получается M:1. Поэтому, на примере Entity, я вижу следующее решение: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Иначе, если я сделаю первичным ключом resId и langId, тогда эти оба поля придется перетащить в Entity, что недопустимо, так как тогда для разных языков придется дублировать поля Entity. Тогда, чтобы вытащить из Entity его имя, нужно сделать джойн Entity с EntityResource по EntityResource.EntityId, и добавить условие фильтрации langId = <id языка>. Возникает вопрос: как лучше сделать для всех таблиц. К примеру, чтобы сделать интернационализацию для Entity и Attribute, есть два варианта: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. или: Код: plsql 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. 26. 27. 28. Как лучше сделать, как считаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 22:20 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 03/20/2012 08:26 PM, oragraf wrote: > не мудрствуй, языков не миллионы, добавь на каждый язык столбец для хранения > значения на этом языке. Вот это -то как раз ни в коем случае нельзя делать. Ок, у меня фамилия - 1 штука, имя - 1 штука, отчество - 1 штука. Почему я не могу сделать 3 столбца (lastname, firstname, middlename) в таблице клиентов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 22:49 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
VetalОчень неудобно в таком случае писать слой работы с интернационализацией на апп-уровне. Придется для каждого языка хардкодить...Это очень надуманная причина. Многое решается генерацией кода. ЗЫ. Я согласен с тем, что количество языков будет фиксировано на этапе проектирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 23:16 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Я вот подумал. У меня ресурс - уникальное значение. Один ресурс не может быть к > разным Entity или Parameter. Поэтому зависимость получается M:1. Так ты ресурс-то не бери, ресурс -- это у тебя уже для конкретного языка. В общем, не важно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 01:51 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Ок, у меня фамилия - 1 штука, имя - 1 штука, отчество - 1 штука. Почему я не > могу сделать 3 столбца (lastname, firstname, middlename) в таблице клиентов? Можешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 01:52 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Это очень надуманная причина. Многое решается генерацией кода. > ЗЫ. Я согласен с тем, что количество языков будет фиксировано на этапе > проектирования. Генерацией кода вообще всё решается. Но это не довод в пользу чего-то. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 01:53 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Ок Вам сказали, что это ошибка. Просто запомните это и никогда так не делайте. > у меня фамилия - 1 штука Ничего общего с обсуждаемой задачей. Но и так > 3 столбца (lastname, firstname, middlename) делать не следует. Домашнее задание: обоснуйте самостоятельно, почему именно. ТС, ваш вариант решения задачи плох. Вы пишите: > "Компьютер" - EntityType > "Онитрон 5" - Entity (конкретная модель компьютера) > "Процессор", "Тип охлаждения" - Attribute > "Core2Duo 2.6Ггц", "жидкий" - Parameter "Core2Duo 2.6 ГГц" не имеет локализованного эквивалента. Более того, это составной атрибут (вообще говоря, элемент с атрибутом, но в данном случае это не важно). Для корректной реализации вам нужно решить три задачи: метаописание экземпляров сущностей, _реляционная_ подстановка элементов и атрибутов, локализация (при существовании локализованных эквивалентов). MasterZiv предложил вам рабочую схему, но на практике вам будет сложно ее развивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 02:01 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
MasterZiv> Я вот подумал. У меня ресурс - уникальное значение. Один ресурс не может быть к > разным Entity или Parameter. Поэтому зависимость получается M:1. Так ты ресурс-то не бери, ресурс -- это у тебя уже для конкретного языка. В общем, не важно. Не понял, о чем Вы, можете расшифровать? :) guest_20040621ТС, ваш вариант решения задачи плох. Для корректной реализации вам нужно решить три задачи: метаописание экземпляров сущностей, _реляционная_ подстановка элементов и атрибутов, локализация (при существовании локализованных эквивалентов). MasterZiv предложил вам рабочую схему, но на практике вам будет сложно ее развивать. Так я ж вроде как и иду по решению от MasterZiv. И где у меня плохо с описанными Вами тремя задачами? MasterZiv > varcharValue varchar(4096), > > Чем Ваше решение лучше? Тогда либо для них надо вставлять в PK что -то типа специального идентификатора языка, либо надо тоже выносить varcharValue в подтаблицу с языком в PK. Ой, извините, забыл прибить это поле, конечно же, этого поля не будет, будет запись для каждого языка в таблице Resource. MasterZivКроме этого, наверняка тебе захочется создать индексы на разные xxValue, чтобы по ним можно было бы искать. Это уже тонкая материя, тут уже надо знать о конкретике СУБД в реализации, но всё же, для каждого xxxVal в таблице будет N записей (всего атрибутов), из них n будет этого значения, а N-n будет NULL. Это может портить статистику и селективность. А может и не портить. Кстати да, действительно, я об этом раньше не задумывался... По идее, не должно портить, просто в статистике будет храниться информация о том, сколько там NULL значений. Как оно в реальной жизни будет, это конечно еще вопрос... Если по таблице на каждый тип атрибута (date, int, varchar, text, float, boolean, char_id), так это вместо одного селекта будет семь, если брать данный случай. Вас не смущает такое количество лишних селектов? Это тоже может плохо сказаться на производительности. Та и закодить это сложнее будет Вобщем, подумали мы, как сделать с тем, чтобы интернационализировать все таблицы, и придумали следующее решение: Код: plsql 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Именно создание промежуточной таблицы Resource позволит нам не заводить по языковой таблице на каждую таблицу БД, или создавать по одному атрибуту на каждую таблицу в большой языковой таблице. Также у нас будут разделы сайта, которые не нужно интернационализировать. Для этого случая мы вынесли varcharValue и textValue в таблицу Resource. Что скажете насчет такого решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 16:57 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> И где у меня плохо с описанными Вами тремя задачами? Ни одна из задач не решена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 17:25 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
guest_20040621> И где у меня плохо с описанными Вами тремя задачами? Ни одна из задач не решена. Почему? Я наоборот считал, что решена. Можете разъяснить, пожалуйста, я не понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 18:09 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Я наоборот считал, что решена. Вы занимаетесь реализацией, спрос будет с вас, поэтому определять состояние задачи тоже вам. > Можете разъяснить Возьмите больше реальных примеров, смоделируйте работу оператора, недостатки станут очевидны. Вы обязательно столкнетесь с необязательностью существования языковых эквивалентов и их множественностью. Плюс обычный геморрой EAV. Если ваша задача - сдать проект заказчику и забыть о нем, нарисовать красивые тестовые данные для демонстрации - не проблема. Но если вы заинтересованы в качественной реализации, описать системы мер - уже нетривиальная задача, не говоря о структуре продуктов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 21:52 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Я наоборот считал, что решена. Вы занимаетесь реализацией, спрос будет с вас, поэтому определять состояние задачи тоже вам. Вот я и хочу разобраться, чтобы спроса плохого не было :) На своем уровне опыта я явных косяков не вижу. Поэтому раз Вы видите, я и прошу помочь guest_20040621> Можете разъяснить Возьмите больше реальных примеров, смоделируйте работу оператора, недостатки станут очевидны. Вы обязательно столкнетесь с необязательностью существования языковых эквивалентов и их множественностью. Плюс обычный геморрой EAV. Да, я это уже учел, и в предыдущем посте мы сделали дополнительные поля для того случая, если сущность не поддерживает интернационализацию. Вы это имели в виду? Если нет, то можно больше конкретики? guest_20040621Если ваша задача - сдать проект заказчику и забыть о нем, нарисовать красивые тестовые данные для демонстрации - не проблема. Но если вы заинтересованы в качественной реализации, описать системы мер - уже нетривиальная задача, не говоря о структуре продуктов. Мы заинтересованы в качественной реализации. Не видим проблем в системе мер. В таблице Attribute у нас есть атрибут measurementId, который также ссылается на таблицу ресурсов, а оттуда уже под конкретный язык выбирается текст описания единицы измерения. Со структурой продуктов тоже не вижу проблемы. parentId в Entity все решает. Я Вас правильно понял? Если нет, то если можно, больше конкретики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 22:01 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> сущность не поддерживает интернационализацию Это простой случай. Если вы начнете различать английский и американский английский, работы прибавится. А если вы пойдете дальше, то выяснится, что один и тот же продукт на разных рынках имеет разное (иногда, например, в случае ЛС - защищенное) наименование. Сложно давать рекомендации "в общем", без ограничения области применения. > Не видим проблем в системе мер Т. е. вы себе хорошо представляете, что в каком государстве измеряется в пинтах, дюймах, фунтах, унциях, тройских унциях, баррелях и пр.? Вы готовы описать практику использования префиксов для двоичной системы счисления, используемых конкретными вендорами? ;) > parentId в Entity все решает Ваша структура позволяет получить формальное описание каждого продукта с учетом количества возможных вхождений компонентов и их обязательности? Четыре процессора в компьютере - это ошибка оператора или это сервер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 22:33 |
|
||
|
Как добавить интернационализацию в EAV базу данных?
|
|||
|---|---|---|---|
|
#18+
> Не понял, о чем Вы, можете расшифровать? :) Ты рассматривал cardinality относительно уже таблицы связи, которая реализует ту связь, которую обсуждали мы. Естественно, если изначально связь M:N, если спуститься ниже на таблицу, это будет 1:N > Кстати да, действительно, я об этом раньше не задумывался... По идее, не должно > портить, просто в статистике будет храниться информация о том, сколько там NULL Зависит от СУБД, по-разному трактуются NULL-ы в индексах. PG я к сожалению не знаю. > значений. Как оно в реальной жизни будет, это конечно еще вопрос... > Если по таблице на каждый тип атрибута (date, int, varchar, text, float, > boolean, char_id), так это вместо одного селекта будет семь, если брать данный > случай. Вас не смущает такое количество лишних селектов? Это тоже может плохо > сказаться на производительности. Та и закодить это сложнее будет Не, ерунда. Там, где в запросе есть PK в виде SARG-а, можно хоть 200 jOIN-ов навертеть, или 200 UNION-ов. > > Вобщем, подумали мы, как сделать с тем, чтобы интернационализировать все > таблицы, и придумали следующее решение: Я потом гляну может некогда сейчас. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 23:26 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1541780]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
188ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 537ms |

| 0 / 0 |
