|
|
|
FAST REFRESH MV
|
|||
|---|---|---|---|
|
#18+
Народ! Помогите создать материализованное представление с FAST REFRESH. Это выглядит примерно так: 1. Создаем справочную таблицу Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 2. Создаем таблицу для хранения данных Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 3. Теперь надо создать логи, я сделал это так, возможно это не совсем правильно - Код: plaintext 1. 2. 3. 4. 5. 6. 4. Ну и теперь главное - надо создать материализованное представление (fast refresh), в котором будут содержаться строки из t_data, для которых родительская запись из t_dict (ключ t_data.dict_id) имеет максимальное значение поля val2 среди всех своих "родственников" в двухуровневой иерархии (детей или родителей). Неправильное решение (с т.зр. fast refresh) выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Как создать MV правильно? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2003, 17:19 |
|
||
|
FAST REFRESH MV
|
|||
|---|---|---|---|
|
#18+
Может, зайти с другой стороны? В таблице T_DICT добавить поле, которое заполнять как максимальное значение VAL2 среди детей (каким образом - отдельный разговор)? Необходимо обеспечить уникальность пары (VAL2, DICT_ID). В общем, дополнение к твоему, проверил на Oracle EE 8.1.7.4: Код: 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. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Это если я правильно понял задачу. Меня смущает только условие: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2003, 21:31 |
|
||
|
FAST REFRESH MV
|
|||
|---|---|---|---|
|
#18+
Сорри, первая строка: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2003, 21:35 |
|
||
|
FAST REFRESH MV
|
|||
|---|---|---|---|
|
#18+
Спасибо, на мой взгляд неплохое решение. Поддерживать max_val2 на мой взгляд можно через триггеры before/after statement и таблицу PL\SQL для хранения DICT_ID измененных строк. Хотя м.б. есть решение лучше? Про "Необходимо обеспечить уникальность пары (VAL2, DICT_ID)." - можно узнать, зачем это надо для FAST REFRESH? (равно и как ограничения NOT NULL на столбцы), или это касается только хорошего тона программирования? А насчет условия and dc.val1 = 0 - оно конечно не относится к постановке задачи, но т.к. имеет место, я решил его добавить (смысл - есть фильтр на таблицу-справочник, сам пример тестовый конечно ;)) - для полноты ограничений на MV, так сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2003, 12:40 |
|
||
|
FAST REFRESH MV
|
|||
|---|---|---|---|
|
#18+
Жаль нельзя редактировать свои сообщения, в догонку к предыдущему - я спрашиваю про уникальный ключ и т.д., т.к. у меня и без этих ограничений создался FAST REFRESH MV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2003, 12:57 |
|
||
|
FAST REFRESH MV
|
|||
|---|---|---|---|
|
#18+
По поводу уникальности значений - это я пересстарался, признаю. После 21-го часа и не такое померещится;) А насчет ограничения not null на поля val2 и max_val2 ИМХО стоит все-таки подумать, поскольку в снапшоте я указал условие: Код: plaintext 1. Допустим, у тебя есть единственный ребенок с val2 is null. Вопрос: следует ли показывать ссылки на него как на запись с максимальным значением val2? Если нет, то и ладно. Если да, то при указанном запросе это вроде как не пройдет, надо устраивать разбирательства по поводу учета NULL'ов. Решай сам, что более приемлемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2003, 13:06 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2791&tid=1991069]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 332ms |

| 0 / 0 |
