Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Вот пытаюсь разобраться со всевозможными РСУБД и понять, что лучше использовать да работы с ОЧЕНЬ сложной структурой объектной классификации... Интересует следующий вопрос. Чем лухше (хуже) Microsoft SQL 2000 чем другие субдешки? (Postgre, SyBase, InterBase, MaxDB by MySQL, InferMix и еще че-нть) Интересуют ценовые, функциональные, скоростные аспекты и области применени тех или иных баз. Все, что я пока понимаю, так это то, что MS SQL весьма похошь (сродни) с Sybase'ом, и InterBase их в некоторых принципиальных вопросах зранения самих баз "обходит". На самом деле можно воспринимать вопрос как анализ всех РСУБД. Помогите. На самом деле очень нужна ваша помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 17:19 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Все, что я пока понимаю, так это то, что MS SQL весьма похошь (сродни) с Sybase'ом, и InterBase их в некоторых принципиальных вопросах зранения самих баз "обходит". Страшно интересно - это в каких еще и "принципиальных вопросах" Interbase их обходит? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 17:22 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Я даже и не знаю, чего тут сказать, когда нужно сравнивать с InterBase, MaxDB by MySQL, InferMix и еще че-нть - я из них даже гнекоторые и не слышал. ЗЫ Как сравнить трактор и сенокосилку?????? -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 17:58 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
--что лучше использовать да работы с ОЧЕНЬ сложной структурой объектной классификации... насколько сложной ? теоритически да и прктически любую сложную структуру можно свернуть в одну таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 18:40 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
попробуйте на MS SQL реализовать подобное: Код: 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 11:49 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Страшно интересно - это в каких еще и "принципиальных вопросах" Interbase их обходит? :) Ну навскидку: FireBird - Версионник - Имеет такой тип данных как ARRAY - Имеет такую фичу как EVENT - Многоплатформенный - Бесплатный Зато MSSQL - Блокировочник - Имеет отличный оптимизатор запросов - лучше держит большое количество коннектов - Имеет более продвинутый T-SQL и т.д. По-моему это уже было:-))). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 12:37 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
gardenman попробуйте на MS SQL реализовать подобное: Триггера - реализуемы. Некоторые как after, некоторые как instead (честно говоря толком не смотрел, какие как кто). Один - просто FK, как я понял. Рекурсивные выборки - как table UDF. Согласен, не так изящно, но реализуемо :-) Кста, некоторые триггера можно и несколько эффективнее написать (при проверке на невозможность удаления родительского узла нет необходимости считать к-во дочерних узлов, надо просто узнать, есть ли хоть один, но, возможно, это просто осбенность реализации приведенного триггера). И, насколько я понял, в MS SQL можно построить дерево в одной транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 17:49 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
>Кста, некоторые триггера можно и несколько эффективнее написать (при проверке на невозможность удаления родительского узла нет необходимости считать к-во дочерних узлов, надо просто узнать, есть ли хоть один, но, возможно, это просто осбенность реализации приведенного триггера). - вот с этим согласиться можно... А вот как быть с триггерами for each row? триггеры - insted of - эт вааще - отстой. Они на вьюшках, и работают медленнее. >И, насколько я понял, в MS SQL можно построить дерево в одной транзакции хм...) Хорошее заявление...)) конечно можно, если сначала отменить действие триггеров а потом вставить)) - но это абсолютно неправильно. Вообще, вставлять узлы пачками я бы не стал... мало ли чего можно в пачке накатать. А как насчет промежуточных группировок GROUPINGSET? а операторы CUBE ROLLUP? Но факт есть факт - реализация языка запросов для MS SQL отстает от DB2 и ORACLE очень сильно. Да и вообще в базах данных ток IBM и Oracle разбираются... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 18:08 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
for each row - ручками, открываем курсор по inserted/deleted и вперёд :-) instead of - он и для табличек тоже, насколько я знаю. Насчет скорости - не имею понятия, триггера использовал только пару раз (у меня к ним стойкое предубеждение сложилось в 6.5, а затем пообвыкся без них. Сейчас, говорят, всё значительно лучше). По поводу GROUPINGSET и CUBE ROLLUP - это о чем мы? А ежели брать конкретную задачу, как то: 1. Запретить зацикливание 2. Запретить ссылаться на несуществующую запись 3. Запретить удалять предка, у которого есть доченрние записи. 4. Получить полный путь узла. 5. Получить вложенность То это реализуется 1 FK(защита от ссылок на несуществующие записи), 1-м триггером(защита от зацикливания), и 2-мя функциями (получение списка предков и получение вложенности). Для пущего понту можно организовать уровень вложенности как computed column в таблице :-) Правда, не рекомендую всё-же... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 18:34 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
gardenman -- Запрещаем ссылку на несуществующие записи -- при добавлении новой записи -- Побочный эффект - не позволяет строить -- дерево в одной транзакции А вот были бы триггеры - insted of - можно было бы и в одной транзакции сделать, но вот нельзя в Оракле реализовать подобное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 20:38 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
... и делается это без всякой отмены действий триггеров - на то они и insted , что работают вместо действия. А что касается триггеров for each row - и хорошо что их нет. Надо с данными работать, а не с записями. Трудно удержаться: Но факт есть факт - реализация языка запросов для ORACLE отстает от MS SQL очень сильно. Да и вообще в базах данных ток MS разбирается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2004, 21:00 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
не хочу расстраивать но тригеры insted of в оракле очень давно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 00:14 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
SergSuper\r Трудно удержаться: \r Но факт есть факт - реализация языка запросов для ORACLE отстает от MS SQL очень сильно. Да и вообще в базах данных ток MS разбирается...\r \r Давно я так не смеялся. Класная шутка. \r А если это не шутка. то /topic/60927 и последние страницы читать вдумчиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 03:33 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
gardenman А вот как быть с триггерами for each row? Курсор, только у меня почему-то 95% триггеров работает без курсоров :( Как быть? :)) gardenman триггеры - insted of - эт вааще - отстой. Они на вьюшках, и работают медленнее.Работают они и на таблицах, а почему отстой, почему медленнее? gardenman А как насчет промежуточных группировок GROUPINGSET?Просвети, что это такое - возможно есть решение. gardenman а операторы CUBE ROLLUP? ROLLUP есть и MS SQL gardenman Но факт есть факт - реализация языка запросов для MS SQL отстает от DB2 и ORACLE очень сильно. Да и вообще в базах данных ток IBM и Oracle разбираютсяВ приведенной чуть выше ссылке уже был один, который даже тему не прочитал :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 09:48 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 locky > 5. Получить вложенность То это реализуется 1 FK(защита от ссылок на несуществующие записи), 1-м триггером(защита от зацикливания), и 2-мя функциями (получение списка предков и получение вложенности). Для пущего понту можно организовать уровень вложенности как computed column в таблице :-) Правда, не рекомендую всё-же... Внешний ключ?... хорошо подумал? Ну ты совсем не Штирлиц))) Штирлиц подумал , ему понравилось, и он подумал еще раз...)) учись у Штирлица) FK в таблице на саму себя?..) Я праильно понял? Интересно, а корневые элементы как буим делать? Зацикливание в дереве может возникнуть по нескольким причинам: 1) изменение ParentID - тут все понятно. 2) Вставка в дерево сразу нескольких записей в одной транзакции в которых уже имеется зацикливание. при вставке нескольких элементов есть вероятность того, что какая-то запись не вставицца, если данные были подготовлены криво,(как правило у всех программеров руки слегка кривоваты) поэтому лучше все делать последовательно закомитив. ИМХО модель БД (таблицы, индексы, триггеры) должна сама себя защищать от кривизны рук программистов, к чему я и стремлюсь всегда всеми силами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:12 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
GROUPING - оператор, позволяющий в SELECT выводить строки с промежуточными итогами по группам. В результате отчет формируется запросто одним единственным запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:15 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
И еще одно - Db2 - единственная база, которая поддерживает C++ в полной мере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:17 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Нет проблем - пиши на С++. Какого хрена тогда тут тебе по MS SQL надо спрашивать? Если ты такой умный? ЗЫ Я не против сравнения, но именно ТАК..... Это в цирке надо товарищу выступать. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:29 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
прости, Тигра, больше не буду ругать MS SQL... Просто скучно мне было...))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:35 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
По моему GROUPING есть в любом СУБД, во всяком случае известном мне (MSSQL, Sybase ASE, Sybase ASA). С деревьями тоже проблем не вижу - если ParentID NULLABLE, то FOREIGN KEY спокойно прокатывает. Насчет поддержки C++ не понял - по моему в любой СУБД можно спокойно писать расширенные хранимые процедуры на C или Java (вместо нее MSSQL скоро будет держать C#). С другой стороны не помню еще случая, когда мне бы понадобилось вместо обычной ХП накатать ее на C или Java. Разве что подумываю парсер SQL пристроить для собственных нужд, но это к СУБД на самом деле никакого отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:37 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2gardenman ну да, FK сам на себя.... А что? А корневые элементы, к примеру, с NULL в ParentId. DB2 такое не умеет? Не знал :-( Я, правда, о ней почти ничего не знаю, кроме самого факта существования и чьей-то реплики " когда-то у DB2 был самый лучший оптимизатор". По поводу проверки зацикливания. При срабатывании триггера after в базе вроде как уже записано дерево. Что мешает проверить его на зацикленность и при необходимости откатить транзкцию? И какая при этом разница, одну я запись вставил, или 20? groupingset и cube rollup - попробуйте почитать BOL select... group by ... with rollup/cube - может быть это то, что Вы имеете в виду? "Единственная... котороая поддерживает C++ в полной мере" Мне казалось, что сервера БД должны поддерживать стандарты SQL.... :-) Ну хоть как-нибудь :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:42 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
lockygroupingset и cube rollup - попробуйте почитать BOL select... group by ... with rollup/cube - может быть это то, что Вы имеете в виду? Если это мне :), то я знаю, что есть GROUPING и CUBE/ROLLUP. Если GROUPINGSET тоже самое, то все понятно, если нет - хотелось бы услышать и объяснения :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 12:24 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2AAron Не, не Вам :-) Кста, вспомнилось - в select есть еще compute by.. В продолжение флейма: я могу написать запрос, который ни в жисть не напишешь на DB2 :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 12:36 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Самое интересное что возможность исользовать SP на СLR .Net первым сделал IBM а не Microsoft :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 12:49 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
автор Самое интересное что возможность исользовать SP на СLR .Net первым сделал IBM а не Microsoft :) Ну, ведь и IBM надо хоть что-то делать, правда? ;-) Не выходит с SQL, переключимся на процедурные языки.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 13:05 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 locky Давай сюды твой запрос)).. хочеца заняцца творчеством...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 13:21 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2gardenman Код: plaintext 1. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 13:49 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Хе хе. Ну если СУБД поддерживает глобальные переменные, то MSSQL победим: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Script Copyright ASA9 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 16:47 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2ASCRUS Догадливые, блин... думал, задачка дольше продержится :-) Хотя, если подходить формально, то результат - неправильный :-) У меня в @@microsoftversion судя по всему лежит какая-та внутренняя версия. В BOL описания нету :-( А ваще-та, всегда не любил Sybase за то, что там есть то, что мне иногда надо, а в MS SQL этого нету :-( В частности глобальные переменные и процедуры на коннект. ну, еще одна фича, насчет которой не уверен, но говорили, что есть (как бы так выразится): возможность выделение каждой сессии таких как бы глобальных временных таблиц, но видимых только изнутри одной сессии, с автоматическим созданием их при коннекте и убивании при дисконнекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 16:56 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Из МСДН if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 8 if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 17:10 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
lockyВ частности глобальные переменные и процедуры на коннект. ну, еще одна фича, насчет которой не уверен, но говорили, что есть (как бы так выразится): возможность выделение каждой сессии таких как бы глобальных временных таблиц, но видимых только изнутри одной сессии, с автоматическим созданием их при коннекте и убивании при дисконнекте. Есть, есть :) Называется глобальные временные таблицы. Достаточно один раз создать, описание хранится в БД, а каждая подключаемая сессия ее видит как собственную, с своими данными и никаких проблем с разделением по сессиям и блокировками. Можно ее еще сделать как NOT TRANSACTIONAL в целях ускорения операций так сказать :) Еще в ASA можно делать вычисляемые поля на UDF, а по ним строить индексы, или в триггерах BEFORE изменять значения полей, TRUNCATE на таблицы с FOREIGN KEY и триггерами. А еще ...... она и на швейной машинке работать умеет :) P.S.Будем надеятся, что все таки новый MSSQL оправдает надежды и пусть не все, но многое дополнит к своей функциональности. Иногда такие мелочи довольно таки приятны при проектировке БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 17:26 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Я родился 14 сентября 1966 г. Вопрос - сколько дней я прожил? Решите задачу на T-SQL ответ я проверю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 17:56 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 gardenman Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:06 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. или я че не понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:06 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Oracle :) Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:09 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
ASA Код: plaintext ответ: 13649 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:12 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
это видно был тест - на что я правда не понял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:17 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Это как я понял конкурс на "слабо" :) А вот такое слабо красивым кодом написать на других СУБД: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Данный пример возвращает набор данных c указанной таблицы (Man), в который включаются поля только с указанным типом (VARCHAR). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:33 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Oracle :) Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 19:02 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 19:28 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
лучше конечно Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 19:37 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2ASCRUS И нетранзакционность есть? Класс... еще больше ненавижу... Если при этом еще и индексы поддерживаются на таких таблицах... В Informix, по моим сведениям, тоже можно сделать нетранзакционные таблицы, но там несколько ограничений (вроде как нельзя на таких таблицах делать индексы). А фича полезная.... Я как-то с горя пожаловался в форуме на то, что в MS SQL нельзя отключить transaction log, так чуть не съели, сказали что это неправильно... что всё должно логгироваться и всё такое... А truncate и в MS SQL можно организовать, токо там приходится править системную таблицу для этого... так что это так - выверт :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 20:01 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
locky "Нетранзакционность" на глобальные временные таблицы есть. И индексы есть, в том числе можно и кластерный сделать. А заодно для полного счастья можно полноценна триггера BEFORE и AFTER повесить, хотя это выглядит забавно для временной сессионной таблицы. All Кстати очень полезная разминка, заодно можно посмотреть, чего и как в SQL у различных СУБД есть. Предлагаю продолжить тему для познавательных и просветительных целей, чтобы лучше представлять себе возможности конкурирующих БД. Ну CTE (Common Table Expression) приводить в пример не буду, вроде WITH ... SELECT и поддержка иеархических запросов почти у всех есть или скоро будет (это к Якону). Меня лично порадовали следующие расширения SQL в ASA. Интересно у кого есть аналоги: KEY JOIN - связь таблиц по FOREIGN KEY: Код: plaintext 1. 2. 3-е вкусности в KEY JOIN: 1. не надо в запросах вспоминать, по каким полям связывать таблицы 2. если поменять имена полей связи в структуре БД или даже сам FOREIGN KEY, то все запросы с KEY JOIN продолжают работать, так как связь тут уже не физическая, а логическая. 3. подстегивает начинающих получше продумывать связи таблиц Расширенный INSERT Код: plaintext 1. 2. 3. В данном примере в INSERT не надо указывать имена полей, по опции WITH AUTO NAME будут браться поля, имена которых совпадают с именами полей запроса. Опция ON EXISTING UPDATE в данном случае еще интереснее - фактически в TABLE1 будут добавлены все новые записи из TABLE2 и обновлены существующие (естественно для этого требуется наличие PRIMARY KEY, плюс чтобы оно не было AUTOINCREMENT). В обычном ANSISQL этот оператор как минимум придеться разбить на 2 части: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Ну в догонку: в принципе я так думаю никого не удивишь атомарными блоками и exception: Код: plaintext 1. 2. 3. 4. 5. 6. (для не знающих - любые операции в атомарном блоке или выполняются или откатываются, фактически это просто более простая запись SAVEPOINT транзакций). Полезной фичей так же оказались виртуальные индексы. Смысл их прост - создаем виртуальный индекс, физически он не строиться, в БД не присутствует, соответственно времени на построение не занимает, никого не блокирует и на реальное выполнения запросов не влияет. Виден только на время действия сессии, если раньше не прибить командой DROP INDEX. Зато прекрасно виден в планах запросов, если их получать с опцией VIRTUAL. Это дает прекрасную возможность ничего не блокируя, не строя и не изменяя поиграться с индексами на таблицу, посмотреть, как все это выглядит в плане запроса и прикинуть, а стоит ли делать индекс и как его лучше сделать. Интересно было бы узнать, у кого в других СУБД есть интересные расширения SQL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 22:50 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
gardenman> Я родился 14 сентября 1966 г. Вопрос - сколько дней я прожил? Решите задачу на T-SQL ответ я проверю... А вот кто решит такую задачку на DB2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 03:06 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 10:17 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Oracle 9.2 select * from Table1 key left join Table2 KEY JOIN не нашел, зато есть NATURAL JOIN: тоже неявное указание полей, только по совпадению имен. http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_103a.htm#2080379 Мое личное мнение - от лукавого эти скрытые соответствия:) Теоретически между двух таблиц может существовать несколько ссылочных ограничений, а с другой стороны - имена полей в них необязательно совпадают. insert into table1 on existing update with auto name select field1, field2 from Table2 WITH AUTO NAME вроде нет. Можно, конечно поля не указывать, но тогда присвоение будет позиционное, ИМХО как и везде. Функцию ON EXISTING UPDATE выполняет оператор MERGE http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_915a.htm#2080942 Атомарные блоки для меня были всегда. "Для меня" - означает с версии Oracle 7.3, хотя скорее всего были и раньше. Дополнительно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Т.е. прошло полных 37 лет и 4 месяца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 10:43 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 gardenman Да, посчитало правильно. Цитирую по памяти документацию по DB2 ver.7.x: При вычислении разницы дат полагается, что год содердит 365 дней, месяц содержит 30 дней. Не поверил своим глазам, проверил на линуховой версии, отработало в полном соответствии с документацией, в феврале 2001 года оказалось 30 дней. Никто с таким эффектом сталкивался? В остальном DB2 произвел очень хорошее впечатление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 11:30 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
авторМое личное мнение - от лукавого эти скрытые соответствия:) Теоретически между двух таблиц может существовать несколько ссылочных ограничений, а с другой стороны - имена полей в них необязательно совпадают. Угу, в ASA тоже есть NATURAL JOIN, только я не стал их приводить как раз по той причине, что это от лукавого. KEY JOIN в отличие от NATURAL JOIN как раз однозначно определяет связь таблиц по существующему FOREIGN KEY (если его нет, то естественно будет возбуждена ошибка). Еще навскидку парочка расширений SQL: Расширенный UPDATE: Код: plaintext 1. 2. Организация цикла FOR по курсору: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Данная конструкция организует именованный цикл LoopName, создает FORWARD ONLY курсор CursorName, внутри цикла обьявляет переменные @Field1 и @Field2 и соотвествующе последовательно перебирает весь курсор, ассоциируя переменные с значением полей текущей записи курсора. Откат изменений из триггера: Код: plaintext Оператор откатит изменения, сделанные на таблицу или внутри триггера, а не всю транзакцию. Если в операторе указывается ошибка, то оператор также откатит атомарный блок, если изменения таблицы шли внутри него. С учетом возможности обработки ошибок в begin ... exception ... end, я думаю этот оператор красиво вписывается в общую концепцию работы с транзакциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 11:41 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Oracle 9.2 Неявные курсоры есть: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Про UPDATE надо посмотреть конструкцию UPDATE (SELECT ...) SET ..., ИМХО нечто похожее. В триггере (и не только) можно испоьзовать автномную транзакцию. Похоже, разработчики решают одни и те же практические задачи и вводят расширения синтаксисов T-SQL. PL/SQL и т.п. Обидно другое: все это нестандартизованно, и если сейчас еще можно, глядя на чужой запрос, как-то догадаться о его предназначении, то в дальнейшем сложность восприятия, перевода из одного диалекта в другой, одинаковой реализации для нескольких диалектов будет только возрастать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 12:41 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
А в sybase такого нету: select * from tt1 where (tt1.id1,tt1.id2) in (select tt2.id1,tt2.id2 from tt2) (подзапрос по нескольким полям сразу) Код: 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 12:50 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
авторА в sybase такого нету Честно говоря, не понял в чем подвох. Вроде как все есть, только по другому: вместо: Код: plaintext 1. будет: Код: plaintext 1. 2. 3. вместо: Код: plaintext 1. будет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Кстати вопрос по использованию множества полей в IN - как будет происходить обработка с NULL значениями ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 14:41 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
NULL - всегда NULL это значит что NULL<>NULL is TRUE NULL=NULL is FALSE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 15:32 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
то есть если я Вас правильно понял, то для запроса: Код: plaintext 1. если tt1.id1 = null и tt2.id1 = null, а tt1.id2 = tt2.id2 , то такая запись в данном запросе не вернется ? Тогда в чем отличие такой конструкции например от INNER JOIN или EXISTS ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 15:39 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2gardenman: Сравнение NULL<>NULL в Oracle даст FALSE, как и любое сравнение с NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 15:46 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Сравнение NULL<>NULL в Oracle даст FALSE, как и любое сравнение с NULL А в аксесе Null<>Null даст False (что в предложении Where работает как False) Кстати о Null-ах. Объясните мне, непонятливому, почему в MS SQL необязательный уникальный индекс может содержать только одну запись с Null-ом? Как же быть с тем, что Null ничему не равен (в том числе и Null-у) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 15:58 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 ASCRUS Ты действительно прав. Это очень похожие вещи. Просто у меня перед глазами)) "хороший пример" проектирования, на Sybase когда имеется с десяток таблиц, и одна на другую завязана последовательно. У меня в результате - десятиэтажные запросы. Лень писать. Да и в ссылках запутаться можно. А первичные ключи сплошь сделаны только по одному полю, которое как правило IDENTITY. И все едва-едва ворочается... Я не могу понять что побудило человека строить модель именно так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:09 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Еще помню фокус по Sybase, что запрос select * from table_name where field_name is null может использовать построенный по TABLE_NAME.FIELD_NAME индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:13 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Лох прав.) Действительно - любое сравнение с NULL всегда FALSE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:18 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
drop procedure c1 go create procedure c1 as begin declare @aa int, @bb int select @aa=null,@bb=null select case when @aa=@bb then 'Равно' else 'Облом' end end go c1 Результат: - Равно но, когда джойним через индекс две таблицы, то))) NULL<>NULL!!!))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:21 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Любая операция в Oracle (кроме конкатенации), в том числе и сравнение с NULL чего угодно даст NULL, а никак не FALSE, но при группировке NULL считаются равными. Учите матчасть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:27 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
авторКстати о Null-ах. Объясните мне, непонятливому, почему в MS SQL необязательный уникальный индекс может содержать только одну запись с Null-ом? Как же быть с тем, что Null ничему не равен (в том числе и Null-у) Хм. Ради интереса сейчас попробовал на ASA. Там работает. А я по привычке после MSSQL даже это и не догадался проверить. Бум знать, спасибо за мысль :) авторselect * from table_name where field_name is null может использовать построенный по TABLE_NAME.FIELD_NAME индекс. Угу, так и есть. gardenman Результат сравнения и обработки NULL зависит от реализации и настроек конкретной СУБД. Например в ASA Ваш пример всегда будет 'Облом', так как сравниваются 2 переменные. Если же выключить опцию ANSINULL, то в запросах, в разделах WHERE, ON и HAVING условия NULL = NULL станет истинным для сравнений значений полей с полями и переменными. Так что у Вас получается 2 переменные с NULL равны. А в ASA например, в CHECK поля или таблицы, условие NULL = 1 будет истинным :) Мда, одно дело различная функциональность СУБД, но различия даже в способах обработки NULL выглядят печально. На лицо явная смерть стандарта SQL и образование нескольких независимых направлений SQL и их клонов в продуктах: блокировочники TSQL: MSSQL,Sybase ASE, Sybase ASA WatcomSQL: Sybase ASA версионники PL/SQL: Oracle, PostgreSQL Interbase SQL: Interbase, Firebird ну наверное и т.д. (про Informix и DB2 ничего сказать не могу, к чему их отнести, так как ничего про них не слышал и не видел). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:56 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Насчет NULL<>NULL я опять попался, а все из-за того, что в коде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. блок ELSE будет выполнен. Хотя запрос select * from scott.emp where not (null <> null) не вернет ни одной записи. Столкнулся с MSSQL 2000. Объясните, почему: 1. 'a' like 'A' возвращает TRUE, это где-то в настройках прописывается регистронезависимое сравнение? В Oracle это будет FALSE. 2. Почему по крайней мере Query Analyzer нечуствителен к регистру написания вызываемых процедур? Если, допустим, есть процедура MyProc, то ее можно вызвать как MYPROC, myproc и т.д. Могут ли одновременно существовать процедуры с именами MyProc и myProc? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 17:15 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 Denis Popov 1. зависит от collation 2. зависит от настроект коннекта, см SET QUOTED_IDENTIFIER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 17:58 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Я писалА в аксесе Null<>Null даст False (что в предложении Where работает как False) Тьфу блин. Разумется Null <> Null даст Null, (что в Where эквивалентно False) Если б не замечание Глюка - так бы и не заметил. Так кто-нить может объяснить - в чем физический (математический, логический и т.п.) смысл того, что уникальном необязательном индексе не может быть два раза Null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 20:02 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 Лох Позорный >Так кто-нить может объяснить - в чем физический (математический, логический и т.п.) смысл того, что уникальном необязательном индексе не может быть два раза Null? Это понять нельзя, это нужно запомниить (C). В стандарте написано, что NULL уникальным индексом индексироваться не должен. Это логично. Но единственная СУБД, известная мне, позволяющая много строк с NULL в уникальном индексе, т.е соответствующая стандарту по этому пункту, это Sybase ASA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 00:52 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 буквацифра Гыы... Ты будешь смеяться, но еще и аксес ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 01:22 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Хотя, конечно, извини В твоем понимании Аксес - не СУБД а двигатель от паровоза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 01:56 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Как ни странно, но Jet Access имеет полезные фичи, который отсутствуют в SQL серверах (например позволяет изменять данные, полученные на основании запросов, который в SQL серверах были бы однозначно как Static). IMHO Jet - один из лучших SQL файл-серверных движков. Да и как клиент он в принципе не плох. Очень правдо досадно, что MS-овцы так жестко навязали в ADP проектах ему в спутники MSSQL, у меня есть знакомые, которые программят на Access, и хотели бы его и дальше использовать в качестве средства построения клиентских приложений, но уже с БД на SQL сервере. С учетом того, что в качестве СУБД им хотелось бы видеть ASA, то варианты получаются не очень красивыми - все делать через присоединенки, поменять Access на что нибудь еще (тут ближе всего стоит PowerBuilder, но все равно учить не мало) или отказаться от расширенной функциональности ASA и работать на связке MSSQL + Access ADP. Я лично считаю, что MS поступила не честно в отношении Access, которому по идее при работе через ADO по барабану с какой СУБД работать, срезав круг его применения до разработки клиентских приложений только под MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 06:57 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Вспомнил про фичу Акесе, которой нет наверное нигде: группировочная функция First :) 2ASCRUS > учетом того, что в качестве СУБД им хотелось бы видеть ASA, то варианты получаются не очень красивыми - все делать через присоединенки Лучше тогда вообще не присоединять (линковать), а использовать запросу к серверу, да через DAO/ADO вызывать хранимые процедуры, используя полученные наборы в качестве источников спискво, форм, отчетов (с Акеса 2002) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 09:09 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
В Oracle уникальный индекс может построен по полю, содержащему сколько угодно NULL-значений. Они просто не включаются в индекс, уникальный или неуникальный. Побочное следствие: запрос с WHERE COLUM_NAME IS NULL использовать такой индекс не сможет. В Accesse по-моему есть возможность построения кросс-табличных запросов, т.е. "разворота" значений выбранных полей по горизонтали. ИМХО для аналитики может быть полезным, и больше нигде я такого не видел. Ответьте пожалуйста на м.б. дилетантский вопрос: COLLATE в MSSQL влияет на сопоставление строчных и прописных букв (т.е. указывает, что 'd' -строчная буква с соответствующей прописной 'D'), или влияет на отработку LIKE, т.е. на результат операции 'd' LIKE 'D'? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 10:33 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2Denis Popov В Oracle уникальный индекс может построен по полю, содержащему сколько угодно NULL-значений. Как уже сказали в Акесе можно, в сиквеле тоже можно, но только 1 значение Null В Accesse по-моему есть возможность построения кросс-табличных запросов, т.е. "разворота" значений выбранных полей по горизонтали. ИМХО для аналитики может быть полезным, и больше нигде я такого не видел. Угу. Есть такое - перекрестный запрос. В Юконе говорят тоже будет Ответьте пожалуйста на м.б. дилетантский вопрос: COLLATE в MSSQL влияет на сопоставление строчных и прописных букв (т.е. указывает, что 'd' -строчная буква с соответствующей прописной 'D'), или влияет на отработку LIKE, т.е. на результат операции 'd' LIKE 'D'? Хотя я и не большой спец в сиквеле, но думаю особо не на вру :) Да, влияет на сопоставление (и поэтому влияет и на отбор, в т.ч. и Like): Например, COLLATE Cyrillic_General_CI_AS - без учета регистра, COLLATE Cyrillic_General_CS_AS - c учетом регистра. Можно задавать для конкретного поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 10:58 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2Denis Popov Можно задавать даже не для поля, а для операции поиска/сравнения. Например, поле "логин" у вас регистрозависимое. При авторизации человек должен набрать его правильно. Но администратор при поиске хочет искать его независимо от регистра. Тогда надо написать: WHERE [login] LIKE @login COLLATE Cyrillic_General_CI_AS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2004, 11:28 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 Senin Viktor >в сиквеле тоже можно, но только 1 значение Null Одно значение везде можно. 2 Denis Popov >В Oracle уникальный индекс может построен по полю, содержащему сколько угодно NULL-значений. Они просто не включаются в индекс, уникальный или неуникальный. Побочное следствие: запрос с WHERE COLUM_NAME IS NULL использовать такой индекс не сможет. Так и должно быть по стандарту. Не знал. А вот в DB2 (7.x) этого сделать нельзя. >В Accesse по-моему есть возможность построения кросс-табличных запросов, т.е. "разворота" значений выбранных полей по горизонтали. ИМХО для аналитики может быть полезным, и больше нигде я такого не видел. В Sybase ASA это можно сделать с помощью функции list. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 07:09 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#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. 32. 33. 34. 35. 36. и не только в 7-ке и 8-ке тоже... Что поделать - уникальный индекс всегда уникальный... И не только в DB2, но и в Sybase ASE 12.5.03 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 09:54 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 gardenman >и не только в 7-ке и 8-ке тоже... Что поделать - уникальный индекс всегда уникальный... NULL - особое значение, он не должен индексироваться. Поработал как-то с DB2, осталось очень хорошее впечатление, лучше даже чем от оракла, но 2 вещи мягко говоря удивили: 30 дней в месяце (это уже исправили, странно только что продержалось аж до 7-й версии) и индексация NULL. >И не только в DB2, но и в Sybase ASE 12.5.03 Возможно, но я говорил об ASA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2004, 05:05 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 с127 NULL - особое значение, он не должен индексироваться Ну почему же не должен. Если очень хочется - то можно и поиндексировать. В аксесе любой индекс имеет параметр IgnoreNulls, как раз указывающий, будут ли индексироваться Null'ы. Но вот нарушенияуникальности из-за повторяющихся Null'ов быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2004, 15:39 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
c127 как ты считал в DB2 v7. кол-во дней в феврале??? db2inst1$ db2 select (days('01.03.2001')-days('01.02.2001')) from sysibm.sysdummy1 1 ----------- 28 1 record(s) selected. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 10:10 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 Лох Позорный >>NULL - особое значение, он не должен индексироваться >Ну почему же не должен. Так написано в стандарте. Возможно имелось в виду, что в поле с уникальным индексом может быть несколько NULL значений, т.е. unique на NULL не распространяется. Я цитирую по памяти. 2 xz321 >Guest c127 как ты считал в DB2 v7. кол-во дней в феврале??? > >db2inst1$ db2 select (days('01.03.2001')-days('01.02.2001')) from >sysibm.sysdummy1 > >1 >----------- >28 Примерно так и считал, получил 30 дней. Того дистрибутива давно нет, но это есть в документации, у ИБМ хорошая документация. Постараюсь найти и прислать ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 02:50 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
2 ASCRUS ASCRUSKEY JOIN в отличие от NATURAL JOIN как раз однозначно определяет связь таблиц по существующему FOREIGN KEY (если его нет, то естественно будет возбуждена ошибка). Ээээ.... А если этих FOREIGN KEY две штуки? Тоже будет ошибка возбуждена? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 17:26 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
авторЭэээ.... А если этих FOREIGN KEY две штуки? Тоже будет ошибка возбуждена? Отвечу вопросом на вопрос: А на кой это между 2 таблицами связь дважды устанавливать ? Ну разве что, если в таблице 2-е разных ссылки на один и тот же справочник. В таких ситуациях INNER JOIN никто не отменял :) Если же Вы дважды по одним и тем же полям внешний ключ сделаете, то ошибки возбуждено не будет. Таблицы в запросе через KEY JOIN будут соединяться по первому найденому внешнему ключу. Однако в окне лога ASA очень часто будет проскакивать предупреждающее сообщение о дублировании внешних ключей на таблицу. В ASA вообще полезно окно лога читать почаще, там много чего пишется: чего в БД не так, насколько она дефрагментирована на файловой системе, отмечаются моменты откушивания и отдавания динамической памяти, прохождения плановых точек сохранения и т.д. Ну и конечно мои БД туда разную полезную информацию катают, всегда можно увидеть, кто чего делает и на каком этапе находится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 23:46 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
авторА на кой это между 2 таблицами связь дважды устанавливать ? Ну разве что, если в таблице 2-е разных ссылки на один и тот же справочник Вот-вот, именно две разные ссылки на один и тот же справочник. Будет ошибка? Или оно тоже будет первый попавшийся внешний ключ использовать? авторВ таких ситуациях INNER JOIN никто не отменял :) Мне интереснее поведение системы именно в случае KEY JOIN'а. Особенно если структура базы ненароком изменится, и там, где был всего один внешний ключ, добавится другой (но на тот же справочник). Что в этом случае произойдет? Часть запросов перестанет работать? Или, что еще хуже, запросы будут работать, но уже по другому? Не нравится мне что-то такая фича... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 02:21 |
|
||
|
Сравнительный анализ MS Sql и другие...
|
|||
|---|---|---|---|
|
#18+
Есть у меня такая табличка :) Код: plaintext 1. 2. На выходе: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 07:04 |
|
||
|
|

start [/forum/topic.php?all=1&fid=35&tid=1554197]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
113ms |
get tp. blocked users: |
2ms |
| others: | 198ms |
| total: | 384ms |

| 0 / 0 |
