|
|
|
Как добавить интернационализацию в 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?fid=32&startmsg=37714780&tid=1541780]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 477ms |

| 0 / 0 |
