|
|
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Существует база объектов определенных типов, у каждого типа есть свойства, специфичные для этого типа. Предположим, есть 3 объекта: морковка (вес, калорийность), огурец(вес, калорийность), лопата(ширина, длина). У морковки и огурца есть свойство - калорийность, у лопаты его нет и не может быть. Но вдруг захотелось странного - получить список всех трех объектов, отсортированных по значению одного свойства (калорийность). Каким запросом это можно сделать? Это вообще возможно или надо как-то менять схему? Подскажите, пожалуйста. Схема: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2007, 20:52 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
Возможно все. Но как только появляется желание выполнить с атрибутом некую операцию "над многими записями", появляется подозрение, что EAV для этого атрибута была выбрана совершенно напрасно. Ну а в данном случае - скажем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Заодно я бы посоветовал выбрать более толковую схему именования первичных и внешних ключей. P.S. В очередной раз полюбуюсь на тех, кто расскажет об удобном и читабельном формате записи ansi join-ов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2007, 21:58 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
Зачем outer join? Поскольку Объект+свойство - уникальный ключ, достаточно group by . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 09:53 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
ModelRЗачем outer join? Чтобы не делать оговорки про то, в каких условиях достаточно group by, а в каких его недостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 10:16 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
Это не оговорка (дополнительное условие) - либо ModelRОбъект+свойство - уникальный ключ либо это не EAV. Впрочем, я кажется ломлюсь в открытую дверь: softwarer Но как только появляется желание выполнить с атрибутом некую операцию "над многими записями", появляется подозрение, что EAV для этого атрибута была выбрана совершенно напрасно.Если у лопаты была одна ширина, то с чего бы ей размножиться чисто при транспонирвании? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 11:09 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
ModelRЭто не оговорка (дополнительное условие) - либо ModelRОбъект+свойство - уникальный ключ либо это не EAV. Я не особо горю желанием выяснять, что именно Вы полагаете EAV. К процитированной Вашей фразе я не имею никаких возражений, но тем не менее в той структуре данных, которая нарисована топикстартером, запрос с group by не способен без дополнительной оговорки гарантировать соответствующее постановке решение задачи. Вы человек грамотный, и если зададитесь вопросом "в каком случае я не получу список всех трех объектов...." вне всякого сомнения, легко найдете ответ на него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 12:21 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
softwarer ModelRЭто не оговорка (дополнительное условие) - либо ModelRОбъект+свойство - уникальный ключ либо это не EAV. Я не особо горю желанием выяснять, что именно Вы полагаете EAV. К процитированной Вашей фразе я не имею никаких возражений, но тем не менее в той структуре данных, которая нарисована топикстартером, запрос с group by не способен без дополнительной оговорки гарантировать соответствующее постановке решение задачи. Аналогично. Я довычислил ограничения целостности из контекста сообщения автора. Может и зря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 16:47 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
softwarerВозможно все. Но как только появляется желание выполнить с атрибутом некую операцию "над многими записями", появляется подозрение, что EAV для этого атрибута была выбрана совершенно напрасно. Наверное, Вы правы. softwarer Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Заодно я бы посоветовал выбрать более толковую схему именования первичных и внешних ключей. Спасибо. Вы о замене objects.ID на objects.objectID, properties.OID на properties.objectID и т.п.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 18:40 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
ModelRЗачем outer join? Поскольку Объект+свойство - уникальный ключ, достаточно group by . Вы имеете в виду группировку в таблице properties? В условии задачи не указано, что у каждого объекта обязательно есть хоть одна характеристика со значением. Поэтому возможна ситуация, когда у объекта нет никаких значений свойств в таблице properties, и в этом случае он по группировке в список не попадет. Или я неправильно понял Ваше предложение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 18:40 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
>Вы имеете в виду группировку в таблице properties? Да. Если нет свойств - не попадет. А если и есть, то не попадет его TypeID и другие (если есть такие)поля из objects. Легко ж допилить чтоб попало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 21:20 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
fillipeВы о замене objects.ID на objects.objectID, properties.OID на properties.objectID и т.п.? Не обязательно именно так, но просто некая очевидная и читаемая система. В том, что Вы написали, пришлось отдельно подумать "а какие связки здесь имеются в виду"; скажем, propID - это ссылка на proplist? А "интуитивно" - на properties. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 23:07 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
softwarer fillipeВы о замене objects.ID на objects.objectID, properties.OID на properties.objectID и т.п.? Не обязательно именно так, но просто некая очевидная и читаемая система. В том, что Вы написали, пришлось отдельно подумать "а какие связки здесь имеются в виду"; скажем, propID - это ссылка на proplist? А "интуитивно" - на properties. Можете посоветовать какой-нибудь сборник best practices или нечто близкое этому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 13:07 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
fillipeМожете посоветовать какой-нибудь сборник best practices или нечто близкое этому? Этот вопрос столько раз обсуждался, что поиск даст Вам все возможные варианты. Могу приложить несколько устаревший регламент, который я писал на эту тему - нисколько не настаивая именно на нем, просто как образец для самостоятельного поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 13:18 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
Да, еще хотел поинтересоваться, насколько целесообразно выделение значений (поле Value) из таблицы properties в отдельную таблицу. Это позволит иметь справочники для каждого параметра и сократит размер базы, но в какой степени это отразится на производительности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 14:01 |
|
||
|
EAV сортировка
|
|||
|---|---|---|---|
|
#18+
softwarer fillipeМожете посоветовать какой-нибудь сборник best practices или нечто близкое этому? Этот вопрос столько раз обсуждался, что поиск даст Вам все возможные варианты. Могу приложить несколько устаревший регламент, который я писал на эту тему - нисколько не настаивая именно на нем, просто как образец для самостоятельного поиска. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 14:02 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1544634]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 352ms |

| 0 / 0 |
