powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Сравнительный анализ MS Sql и другие...
25 сообщений из 82, страница 1 из 4
Сравнительный анализ MS Sql и другие...
    #32386551
Michael BAG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот пытаюсь разобраться со всевозможными РСУБД и понять, что лучше использовать да работы с ОЧЕНЬ сложной структурой объектной классификации...
Интересует следующий вопрос.
Чем лухше (хуже) Microsoft SQL 2000 чем другие субдешки?
(Postgre, SyBase, InterBase, MaxDB by MySQL, InferMix и еще че-нть)

Интересуют ценовые, функциональные, скоростные аспекты и области применени тех или иных баз.

Все, что я пока понимаю, так это то, что MS SQL весьма похошь (сродни) с Sybase'ом, и InterBase их в некоторых принципиальных вопросах зранения самих баз "обходит".

На самом деле можно воспринимать вопрос как анализ всех РСУБД.

Помогите. На самом деле очень нужна ваша помощь.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32386555
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, что я пока понимаю, так это то, что MS SQL весьма похошь (сродни) с Sybase'ом, и InterBase их в некоторых принципиальных вопросах зранения самих баз "обходит".

Страшно интересно - это в каких еще и "принципиальных вопросах" Interbase их обходит? :)
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32386610
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я даже и не знаю, чего тут сказать, когда нужно сравнивать с InterBase, MaxDB by MySQL, InferMix и еще че-нть - я из них даже гнекоторые и не слышал.

ЗЫ Как сравнить трактор и сенокосилку??????

-- Tygra's --
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32386664
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--что лучше использовать да работы с ОЧЕНЬ сложной структурой объектной классификации...

насколько сложной ?

теоритически да и прктически любую сложную структуру можно свернуть в одну таблицу
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32387509
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте на 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.
 --------------------------------------------------------
 
 --  ItemID		Код узла дерева
 
 --  ParentID	Родительский элемент
 
 --  Name		Наименование узла
 
 --------------------------------------------------------
 
CREATE TABLE dict.Dict (
    ItemID	INTEGER	NOT NULL,
    ParentID	INTEGER,
    Name	CHAR( 35 ),
    constraint  AtParent CHECK (ParentID<>ItemID),
    constraint  AtItemID PRIMARY KEY (ItemID)
)
@

CREATE UNIQUE INDEX dict.IDict ON dict.Dict (Name) ALLOW REVERSE SCANS
@
CREATE UNIQUE INDEX dict.IDictParent ON dict.Dict (ParentID,ItemID)
@

 ----------------------------------------------
 
 -- Запрещаем ссылку на несуществующие записи
 
 -- при обновлении ParentID
 
 ----------------------------------------------
 
CREATE TRIGGER dict.BUDictParent
NO CASCADE BEFORE UPDATE ON dict.Dict
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
WHEN (
	(N.ParentID IS NOT NULL)
    AND ((SELECT P.ItemID FROM dict.Dict P WHERE P.ItemID=N.ParentID) IS NULL)
)	SIGNAL SQLSTATE '75011' ('Несуществующий ParentID')
@

 ----------------------------------------------
 
 -- Защита от рекурсивного зацикливания
 
 -- при обновлении ParentID
 
 ----------------------------------------------
 
CREATE TRIGGER dict.BUDict
NO CASCADE BEFORE UPDATE ON dict.Dict
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
WITH Lvl (TopItemID,ItemID,ParentID)
AS (
	SELECT bottom.ItemID,bottom.ItemID,bottom.ParentID
		FROM dict.Dict AS bottom
	        WHERE bottom.ItemID=N.ParentID
	UNION ALL
	SELECT Lvl.TopItemID,parent.ItemID,parent.ParentID
    	FROM Lvl, dict.Dict AS parent
	        WHERE parent.ItemID=Lvl.ParentID
            	AND Lvl.ParentID<>Lvl.TopItemID
)
SELECT
    CASE 
    	WHEN Lvl.ParentID=N.ItemID THEN RAISE_ERROR('70021','Рекурсивное зацикливание')
        ELSE Lvl.ParentID
    END
FROM Lvl 
@

 ----------------------------------------------
 
 -- Запрещаем ссылку на несуществующие записи
 
 -- при добавлении новой записи
 
 -- Побочный эффект - не позволяет строить
 
 -- дерево в одной транзакции
 
 ----------------------------------------------
 
CREATE TRIGGER dict.BIDictParentID
NO CASCADE BEFORE INSERT ON dict.Dict
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
WHEN (
	(N.ParentID IS NOT NULL)
    AND ((SELECT P.ItemID FROM dict.Dict P WHERE P.ItemID=N.ParentID) IS NULL)
) SIGNAL SQLSTATE '75011' ('Несуществующий ParentID')
@


 ----------------------------------------------
 
 -- Запрещаем удаление родительского узла
 
 ----------------------------------------------
 
CREATE TRIGGER dict.BDDict
NO CASCADE BEFORE DELETE ON dict.Dict
REFERENCING OLD AS O
FOR EACH ROW MODE DB2SQL
WHEN (
(SELECT COUNT(*) FROM dict.Dict D
	WHERE D.ParentID=O.ItemID)> 0 
) SIGNAL SQLSTATE '75031' ('Существуют ссылки на узел')
@



insert into dict.Dict (ItemID,ParentID,Name) values ( 1 ,NULL,'root')			@
insert into dict.Dict (ItemID,ParentID,Name) values ( 2 , 1 ,'Два')				@
insert into dict.Dict (ItemID,ParentID,Name) values ( 3 , 1 ,'Три')				@
insert into dict.Dict (ItemID,ParentID,Name) values ( 4 , 1 ,'Четыре')			@
insert into dict.Dict (ItemID,ParentID,Name) values ( 5 , 2 ,'Пять')			@
insert into dict.Dict (ItemID,ParentID,Name) values ( 6 , 2 ,'Шесть')			@
insert into dict.Dict (ItemID,ParentID,Name) values ( 7 , 3 ,'Семь')			@
insert into dict.Dict (ItemID,ParentID,Name) values ( 8 , 3 ,'Восемь')			@
insert into dict.Dict (ItemID,ParentID,Name) values ( 9 , 3 ,'Девять')			@
insert into dict.Dict (ItemID,ParentID,Name) values ( 10 , 6 ,'Десять')			@
insert into dict.Dict (ItemID,ParentID,Name) values ( 11 , 6 ,'Одиннадцать')	@
insert into dict.Dict (ItemID,ParentID,Name) values ( 12 , 9 ,'Двенадцать')		@
insert into dict.Dict (ItemID,ParentID,Name) values ( 13 , 12 ,'Тринадцать')	@
insert into dict.Dict (ItemID,ParentID,Name) values ( 14 , 13 ,'Четырнадцать')	@
@

 -----------------------------------------------------
 
 --
 
 --  1--+--2---------+--5
 
 --     |            |
 
 --     +--3--+--7   +--6--+--10
 
 --     |     |            |
 
 --     +--4  +--8         +--11
 
 --           |
 
 --           +--9--12--13--14
 
 --
 
 --
 
 ----------------------------------------------------
 

select * from dict.Dict@






Код: 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.
 --Выбор всех предков для опции
 
with Node (ItemId,ParentId,Name,Cnt)
as (
	select child.ItemId,child.ParentId,child.Name, 0 
	    from dict.Dict child
		    where child.ItemId= 13 

	union all
   		select parent.ItemId,parent.ParentId,parent.Name,node.Cnt+ 1 
        	from dict.Dict parent, node 
            where parent.ItemId=node.ParentID )

select * from Node order by Cnt desc
@

 --Определение уровня вложеннности для узла
 
with Lvl (Level,ParentID) 
as (
	select  0 ,ParentID
    	from dict.Dict bottom
        	where ItemID= 1 

    union all

	select Lvl.Level+ 1 ,parent.ParentID from dict.Dict parent,Lvl
    	where parent.ItemID=Lvl.ParentID )
select count(*) from Lvl
@

...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32387604
f_w_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страшно интересно - это в каких еще и "принципиальных вопросах" Interbase их обходит? :)
Ну навскидку:
FireBird
- Версионник
- Имеет такой тип данных как ARRAY
- Имеет такую фичу как EVENT
- Многоплатформенный
- Бесплатный
Зато
MSSQL
- Блокировочник
- Имеет отличный оптимизатор запросов
- лучше держит большое количество коннектов
- Имеет более продвинутый T-SQL

и т.д.
По-моему это уже было:-))).
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388207
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman
попробуйте на MS SQL реализовать подобное:

Триггера - реализуемы. Некоторые как after, некоторые как instead (честно говоря толком не смотрел, какие как кто). Один - просто FK, как я понял.
Рекурсивные выборки - как table UDF. Согласен, не так изящно, но реализуемо :-)
Кста, некоторые триггера можно и несколько эффективнее написать (при проверке на невозможность удаления родительского узла нет необходимости считать к-во дочерних узлов, надо просто узнать, есть ли хоть один, но, возможно, это просто осбенность реализации приведенного триггера).
И, насколько я понял, в MS SQL можно построить дерево в одной транзакции.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388240
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Кста, некоторые триггера можно и несколько эффективнее написать (при проверке на невозможность удаления родительского узла нет необходимости считать к-во дочерних узлов, надо просто узнать, есть ли хоть один, но, возможно, это просто осбенность реализации приведенного триггера).

- вот с этим согласиться можно...
А вот как быть с триггерами for each row?

триггеры - insted of - эт вааще - отстой. Они на вьюшках, и работают медленнее.

>И, насколько я понял, в MS SQL можно построить дерево в одной транзакции
хм...) Хорошее заявление...)) конечно можно, если сначала отменить действие триггеров а потом вставить)) - но это абсолютно неправильно.
Вообще, вставлять узлы пачками я бы не стал... мало ли чего можно в пачке накатать.

А как насчет промежуточных группировок GROUPINGSET? а операторы CUBE ROLLUP?

Но факт есть факт - реализация языка запросов для MS SQL отстает от DB2 и ORACLE очень сильно. Да и вообще в базах данных ток IBM и Oracle разбираются...
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388271
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for each row - ручками, открываем курсор по inserted/deleted и вперёд :-)
instead of - он и для табличек тоже, насколько я знаю. Насчет скорости - не имею понятия, триггера использовал только пару раз (у меня к ним стойкое предубеждение сложилось в 6.5, а затем пообвыкся без них. Сейчас, говорят, всё значительно лучше).
По поводу GROUPINGSET и CUBE ROLLUP - это о чем мы?

А ежели брать конкретную задачу, как то:
1. Запретить зацикливание
2. Запретить ссылаться на несуществующую запись
3. Запретить удалять предка, у которого есть доченрние записи.
4. Получить полный путь узла.
5. Получить вложенность
То это реализуется 1 FK(защита от ссылок на несуществующие записи), 1-м триггером(защита от зацикливания), и 2-мя функциями (получение списка предков и получение вложенности).
Для пущего понту можно организовать уровень вложенности как computed column в таблице :-) Правда, не рекомендую всё-же...
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388380
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman -- Запрещаем ссылку на несуществующие записи
-- при добавлении новой записи
-- Побочный эффект - не позволяет строить
-- дерево в одной транзакции
А вот были бы триггеры - insted of - можно было бы и в одной транзакции сделать, но вот нельзя в Оракле реализовать подобное :)
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388395
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... и делается это без всякой отмены действий триггеров - на то они и insted , что работают вместо действия.

А что касается триггеров for each row - и хорошо что их нет. Надо с данными работать, а не с записями.

Трудно удержаться:
Но факт есть факт - реализация языка запросов для ORACLE отстает от MS SQL очень сильно. Да и вообще в базах данных ток MS разбирается...
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388459
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
не хочу расстраивать но тригеры insted of в оракле очень давно ...
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388478
s79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s79
Гость
SergSuper\r
Трудно удержаться: \r
Но факт есть факт - реализация языка запросов для ORACLE отстает от MS SQL очень сильно. Да и вообще в базах данных ток MS разбирается...\r
\r
Давно я так не смеялся. Класная шутка. \r
А если это не шутка. то /topic/60927 и последние страницы читать вдумчиво.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388601
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman А вот как быть с триггерами for each row? Курсор, только у меня почему-то 95% триггеров работает без курсоров :( Как быть? :))

gardenman триггеры - insted of - эт вааще - отстой. Они на вьюшках, и работают медленнее.Работают они и на таблицах, а почему отстой, почему медленнее?

gardenman А как насчет промежуточных группировок GROUPINGSET?Просвети, что это такое - возможно есть решение.

gardenman а операторы CUBE ROLLUP? ROLLUP есть и MS SQL

gardenman Но факт есть факт - реализация языка запросов для MS SQL отстает от DB2 и ORACLE очень сильно. Да и вообще в базах данных ток IBM и Oracle разбираютсяВ приведенной чуть выше ссылке уже был один, который даже тему не прочитал :))
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388732
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 locky > 5. Получить вложенность
То это реализуется 1 FK(защита от ссылок на несуществующие записи), 1-м триггером(защита от зацикливания), и 2-мя функциями (получение списка предков и получение вложенности).
Для пущего понту можно организовать уровень вложенности как computed column в таблице :-) Правда, не рекомендую всё-же...


Внешний ключ?... хорошо подумал? Ну ты совсем не Штирлиц)))
Штирлиц подумал , ему понравилось, и он подумал еще раз...))
учись у Штирлица)

FK в таблице на саму себя?..) Я праильно понял? Интересно, а корневые элементы как буим делать?

Зацикливание в дереве может возникнуть по нескольким причинам:
1) изменение ParentID - тут все понятно.
2) Вставка в дерево сразу нескольких записей в одной транзакции
в которых уже имеется зацикливание.
при вставке нескольких элементов есть вероятность того, что какая-то запись не вставицца, если данные были подготовлены криво,(как правило у всех программеров руки слегка кривоваты) поэтому лучше все делать последовательно закомитив.

ИМХО модель БД (таблицы, индексы, триггеры)
должна сама себя защищать от кривизны рук программистов, к чему я и стремлюсь всегда всеми силами.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388737
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GROUPING - оператор, позволяющий в SELECT выводить строки с промежуточными итогами по группам. В результате отчет формируется запросто одним единственным запросом.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388743
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще одно - Db2 - единственная база, которая поддерживает C++ в полной мере.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388766
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет проблем - пиши на С++.
Какого хрена тогда тут тебе по MS SQL надо спрашивать? Если ты такой умный?

ЗЫ Я не против сравнения, но именно ТАК..... Это в цирке надо товарищу выступать.

-- Tygra's --
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388778
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прости, Тигра, больше не буду ругать MS SQL...
Просто скучно мне было...)))
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388785
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему GROUPING есть в любом СУБД, во всяком случае известном мне (MSSQL, Sybase ASE, Sybase ASA). С деревьями тоже проблем не вижу - если ParentID NULLABLE, то FOREIGN KEY спокойно прокатывает. Насчет поддержки C++ не понял - по моему в любой СУБД можно спокойно писать расширенные хранимые процедуры на C или Java (вместо нее MSSQL скоро будет держать C#). С другой стороны не помню еще случая, когда мне бы понадобилось вместо обычной ХП накатать ее на C или Java. Разве что подумываю парсер SQL пристроить для собственных нужд, но это к СУБД на самом деле никакого отношения не имеет.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388796
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2gardenman
ну да, FK сам на себя.... А что? А корневые элементы, к примеру, с NULL в ParentId.
DB2 такое не умеет? Не знал :-( Я, правда, о ней почти ничего не знаю, кроме самого факта существования и чьей-то реплики " когда-то у DB2 был самый лучший оптимизатор".
По поводу проверки зацикливания. При срабатывании триггера after в базе вроде как уже записано дерево. Что мешает проверить его на зацикленность и при необходимости откатить транзкцию? И какая при этом разница, одну я запись вставил, или 20?
groupingset и cube rollup - попробуйте почитать BOL select... group by ... with rollup/cube - может быть это то, что Вы имеете в виду?
"Единственная... котороая поддерживает C++ в полной мере"
Мне казалось, что сервера БД должны поддерживать стандарты SQL.... :-) Ну хоть как-нибудь :-)
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388870
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockygroupingset и cube rollup - попробуйте почитать BOL select... group by ... with rollup/cube - может быть это то, что Вы имеете в виду? Если это мне :), то я знаю, что есть GROUPING и CUBE/ROLLUP. Если GROUPINGSET тоже самое, то все понятно, если нет - хотелось бы услышать и объяснения :)
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388891
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AAron
Не, не Вам :-)
Кста, вспомнилось - в select есть еще compute by..

В продолжение флейма: я могу написать запрос, который ни в жисть не напишешь на DB2 :-)
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388921
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое интересное что возможность исользовать SP на СLR .Net первым сделал IBM а не Microsoft :)
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32388958
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Самое интересное что возможность исользовать SP на СLR .Net первым сделал IBM а не Microsoft :)

Ну, ведь и IBM надо хоть что-то делать, правда? ;-)
Не выходит с SQL, переключимся на процедурные языки....
...
Рейтинг: 0 / 0
25 сообщений из 82, страница 1 из 4
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Сравнительный анализ MS Sql и другие...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]