|
|
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
Есть 3 таблички. В Оракле, но это несущественно. 1. TABLE C ( usrdb_ID NUMBER, ID NUMBER PK, name VARCHAR2, ... ) 2. TABLE CP (usrdb_id NUMBER, id NUMBER PK, cp_type NUMBER, name VARCHAR2 ) 3. TABLE CPV (usrdb_id NUMBER, id NUMBER PK, c_ID NUMBER, CP_ID NUMBER, valnum NUMBER, valchar VARCHAR2) В С хранятся главные записи, В CP список атрибутов для каждой usr_db В CPV хранятся значения атрибутов для каждой записи. Если в CP у соответствующего CP_ID записан тип cp_type 1, то тип атрибута вещственный, если 2 - то текст. Соответственно, заполняется поле или valnum или varchar Можно считать, что поля проиндексированы, и есть составные индексы по C(usrdb_id, ID) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2006, 16:50 |
|
||
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
Черт, Enter нажался сам. Недописал. Вот сообщение полностью Есть 3 таблички. В Оракле, но это несущественно. 1. TABLE C ( usrdb_ID NUMBER, ID NUMBER PK, name VARCHAR2, ... ) 2. TABLE CP (usrdb_id NUMBER, id NUMBER PK, cp_type NUMBER, name VARCHAR2 ) 3. TABLE CPV (usrdb_id NUMBER, id NUMBER PK, c_ID NUMBER, CP_ID NUMBER, valnum NUMBER, valchar VARCHAR2) В С хранятся главные записи, В CP список атрибутов для каждой usr_db В CPV хранятся значения атрибутов для каждой записи. Если в CP у соответствующего CP_ID записан тип cp_type 1, то тип атрибута вещственный, если 2 - то текст. Соответственно, заполняется поле или valnum или varchar Можно считать, что поля проиндексированы, и есть составные индексы по C(usrdb_id, ID) 1 Вопрос. Как лучше всего втакой ситуации задавать запросы типа SELECT C.* FROM C , cpv WHERE usrdb_id = :usrdb_id and c.id = cpv.id AND .... список условий на значение атрибутов CP_ID = :CP_Id1 AND valnum = .... AND CP_ID = :CP_ID2 and valchar = ..... итд. 2 Вопрос. Как сделать запрос такого же типа, но чтобы условия на значения атрибутов были сложные, типа WHERE attribValue1 + attributValue2 <10 или WHERE attribValue1 + attributValue2 = attribValue3 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2006, 16:56 |
|
||
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
Если вы знаете, как это сделать не в Оракле, а , например , в MSSQL, скажите плз, как на mssql-вском варианте такой запрос написать. Мне нужно понять сам принцип На первый вопрос я бы использовал в оракле intersect , но как на второй вопрос ответить - не знаю.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2006, 17:00 |
|
||
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
Эпидемия однако... Идея разворота EAV в плоскую таблицу -sum()/max()/min()... group by. Для Oracle . Если список атрибутов - переменная, то динамический запрос с той же идеей. Также есть в FAQ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2006, 17:25 |
|
||
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
ModelRЭпидемия однако... Идея разворота EAV в плоскую таблицу -sum()/max()/min()... group by. Для Oracle . Если список атрибутов - переменная, то динамический запрос с той же идеей. Также есть в FAQ. Пример полезный, спору нет. Но мне для начала нужен не агрегирующий запрос, а просто список всех столбцов из С, у которых огрничения на атрибуты типа A1+A2 <A3 Или А1*A2 < 10 Хотя список атрибутов может быть разный, предположим для простоты, что их фиксированное количество, скажем десяток. Как? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 00:05 |
|
||
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
2Makondo В примере показано, как строки превратить в столбцы. Дальше на эти столбцы можно накладывать любые условия, как при обычной структуре таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 04:23 |
|
||
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
Блин, не связал вторую таблицу с первой :) Можете помочь? Связь C с CPV C.Id = CPV.C_ID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 14:20 |
|
||
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
То есть, ничего нельзя сделать кроме вот что-то типа такого Код: plaintext 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. У меня такое предчувствие, что он будет слегка тормозить... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 14:23 |
|
||
|
Запросы в нормализованной базе -как?
|
|||
|---|---|---|---|
|
#18+
Не, ну как в FAQ, только в ваших терминах Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 09:42 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1544859]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
174ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 419ms |

| 0 / 0 |
