Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Сравнительный анализ MS Sql и другие...  [new]
Michael BAG
Guest
Вот пытаюсь разобраться со всевозможными РСУБД и понять, что лучше использовать да работы с ОЧЕНЬ сложной структурой объектной классификации...
Интересует следующий вопрос.
Чем лухше (хуже) Microsoft SQL 2000 чем другие субдешки?
(Postgre, SyBase, InterBase, MaxDB by MySQL, InferMix и еще че-нть)

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

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

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

Помогите. На самом деле очень нужна ваша помощь.
23 янв 04, 17:19    [505161]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
funikovyuri
Member

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

Страшно интересно - это в каких еще и "принципиальных вопросах" Interbase их обходит? :)
23 янв 04, 17:22    [505168]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
Я даже и не знаю, чего тут сказать, когда нужно сравнивать с InterBase, MaxDB by MySQL, InferMix и еще че-нть - я из них даже гнекоторые и не слышал.

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

-- Tygra's --
23 янв 04, 17:58    [505244]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
--что лучше использовать да работы с ОЧЕНЬ сложной структурой объектной классификации...

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

теоритически да и прктически любую сложную структуру можно свернуть в одну таблицу
23 янв 04, 18:40    [505310]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
попробуйте на MS SQL реализовать подобное:

--------------------------------------------------------

-- 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@







--Выбор всех предков для опции

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
@

26 янв 04, 11:49    [506509]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
f_w_p
Guest
Страшно интересно - это в каких еще и "принципиальных вопросах" Interbase их обходит? :)
Ну навскидку:
FireBird
- Версионник
- Имеет такой тип данных как ARRAY
- Имеет такую фичу как EVENT
- Многоплатформенный
- Бесплатный
Зато
MSSQL
- Блокировочник
- Имеет отличный оптимизатор запросов
- лучше держит большое количество коннектов
- Имеет более продвинутый T-SQL

и т.д.
По-моему это уже было:-))).
26 янв 04, 12:37    [506642]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
gardenman

попробуйте на MS SQL реализовать подобное:

Триггера - реализуемы. Некоторые как after, некоторые как instead (честно говоря толком не смотрел, какие как кто). Один - просто FK, как я понял.
Рекурсивные выборки - как table UDF. Согласен, не так изящно, но реализуемо :-)
Кста, некоторые триггера можно и несколько эффективнее написать (при проверке на невозможность удаления родительского узла нет необходимости считать к-во дочерних узлов, надо просто узнать, есть ли хоть один, но, возможно, это просто осбенность реализации приведенного триггера).
И, насколько я понял, в MS SQL можно построить дерево в одной транзакции.
26 янв 04, 17:49    [507391]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
>Кста, некоторые триггера можно и несколько эффективнее написать (при проверке на невозможность удаления родительского узла нет необходимости считать к-во дочерних узлов, надо просто узнать, есть ли хоть один, но, возможно, это просто осбенность реализации приведенного триггера).

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

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

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

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

Но факт есть факт - реализация языка запросов для MS SQL отстает от DB2 и ORACLE очень сильно. Да и вообще в базах данных ток IBM и Oracle разбираются...
26 янв 04, 18:08    [507431]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
for each row - ручками, открываем курсор по inserted/deleted и вперёд :-)
instead of - он и для табличек тоже, насколько я знаю. Насчет скорости - не имею понятия, триггера использовал только пару раз (у меня к ним стойкое предубеждение сложилось в 6.5, а затем пообвыкся без них. Сейчас, говорят, всё значительно лучше).
По поводу GROUPINGSET и CUBE ROLLUP - это о чем мы?

А ежели брать конкретную задачу, как то:
1. Запретить зацикливание
2. Запретить ссылаться на несуществующую запись
3. Запретить удалять предка, у которого есть доченрние записи.
4. Получить полный путь узла.
5. Получить вложенность
То это реализуется 1 FK(защита от ссылок на несуществующие записи), 1-м триггером(защита от зацикливания), и 2-мя функциями (получение списка предков и получение вложенности).
Для пущего понту можно организовать уровень вложенности как computed column в таблице :-) Правда, не рекомендую всё-же...
26 янв 04, 18:34    [507469]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
gardenman
-- Запрещаем ссылку на несуществующие записи
-- при добавлении новой записи
-- Побочный эффект - не позволяет строить
-- дерево в одной транзакции

А вот были бы триггеры - insted of - можно было бы и в одной транзакции сделать, но вот нельзя в Оракле реализовать подобное :)
26 янв 04, 20:38    [507601]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
... и делается это без всякой отмены действий триггеров - на то они и insted , что работают вместо действия.

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

Трудно удержаться:
Но факт есть факт - реализация языка запросов для ORACLE отстает от MS SQL очень сильно. Да и вообще в базах данных ток MS разбирается...
26 янв 04, 21:00    [507620]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
Yo!
Guest
не хочу расстраивать но тригеры insted of в оракле очень давно ...
27 янв 04, 00:14    [507708]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
s79
Member

Откуда: Владивосток
Сообщений: 40
SergSuper

Трудно удержаться:
Но факт есть факт - реализация языка запросов для ORACLE отстает от MS SQL очень сильно. Да и вообще в базах данных ток MS разбирается...

Давно я так не смеялся. Класная шутка.
А если это не шутка. то https://www.sql.ru/forum/actualthread.aspx?bid=10&tid=60927 и последние страницы читать вдумчиво.
27 янв 04, 03:33    [507728]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
gardenman
А вот как быть с триггерами for each row?
Курсор, только у меня почему-то 95% триггеров работает без курсоров :( Как быть? :))

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

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

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

gardenman
Но факт есть факт - реализация языка запросов для MS SQL отстает от DB2 и ORACLE очень сильно. Да и вообще в базах данных ток IBM и Oracle разбираются
В приведенной чуть выше ссылке уже был один, который даже тему не прочитал :))
27 янв 04, 09:48    [507878]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
2 locky >5. Получить вложенность
То это реализуется 1 FK(защита от ссылок на несуществующие записи), 1-м триггером(защита от зацикливания), и 2-мя функциями (получение списка предков и получение вложенности).
Для пущего понту можно организовать уровень вложенности как computed column в таблице :-) Правда, не рекомендую всё-же...


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

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

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

ИМХО модель БД (таблицы, индексы, триггеры)
должна сама себя защищать от кривизны рук программистов, к чему я и стремлюсь всегда всеми силами.
27 янв 04, 11:12    [508060]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
GROUPING - оператор, позволяющий в SELECT выводить строки с промежуточными итогами по группам. В результате отчет формируется запросто одним единственным запросом.
27 янв 04, 11:15    [508068]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
И еще одно - Db2 - единственная база, которая поддерживает C++ в полной мере.
27 янв 04, 11:17    [508074]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
Нет проблем - пиши на С++.
Какого хрена тогда тут тебе по MS SQL надо спрашивать? Если ты такой умный?

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

-- Tygra's --
27 янв 04, 11:29    [508107]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
прости, Тигра, больше не буду ругать MS SQL...
Просто скучно мне было...)))
27 янв 04, 11:35    [508121]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
По моему GROUPING есть в любом СУБД, во всяком случае известном мне (MSSQL, Sybase ASE, Sybase ASA). С деревьями тоже проблем не вижу - если ParentID NULLABLE, то FOREIGN KEY спокойно прокатывает. Насчет поддержки C++ не понял - по моему в любой СУБД можно спокойно писать расширенные хранимые процедуры на C или Java (вместо нее MSSQL скоро будет держать C#). С другой стороны не помню еще случая, когда мне бы понадобилось вместо обычной ХП накатать ее на C или Java. Разве что подумываю парсер SQL пристроить для собственных нужд, но это к СУБД на самом деле никакого отношения не имеет.
27 янв 04, 11:37    [508129]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
2gardenman
ну да, FK сам на себя.... А что? А корневые элементы, к примеру, с NULL в ParentId.
DB2 такое не умеет? Не знал :-( Я, правда, о ней почти ничего не знаю, кроме самого факта существования и чьей-то реплики " когда-то у DB2 был самый лучший оптимизатор".
По поводу проверки зацикливания. При срабатывании триггера after в базе вроде как уже записано дерево. Что мешает проверить его на зацикленность и при необходимости откатить транзкцию? И какая при этом разница, одну я запись вставил, или 20?
groupingset и cube rollup - попробуйте почитать BOL select... group by ... with rollup/cube - может быть это то, что Вы имеете в виду?
"Единственная... котороая поддерживает C++ в полной мере"
Мне казалось, что сервера БД должны поддерживать стандарты SQL.... :-) Ну хоть как-нибудь :-)
27 янв 04, 11:42    [508145]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
locky
groupingset и cube rollup - попробуйте почитать BOL select... group by ... with rollup/cube - может быть это то, что Вы имеете в виду?
Если это мне :), то я знаю, что есть GROUPING и CUBE/ROLLUP. Если GROUPINGSET тоже самое, то все понятно, если нет - хотелось бы услышать и объяснения :)
27 янв 04, 12:24    [508241]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
2AAron
Не, не Вам :-)
Кста, вспомнилось - в select есть еще compute by..

В продолжение флейма: я могу написать запрос, который ни в жисть не напишешь на DB2 :-)
27 янв 04, 12:36    [508267]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
Nikolay Kulikov
Guest
Самое интересное что возможность исользовать SP на СLR .Net первым сделал IBM а не Microsoft :)
27 янв 04, 12:49    [508301]     Ответить | Цитировать Сообщить модератору
 Re: Сравнительный анализ MS Sql и другие...  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
автор

Самое интересное что возможность исользовать SP на СLR .Net первым сделал IBM а не Microsoft :)

Ну, ведь и IBM надо хоть что-то делать, правда? ;-)
Не выходит с SQL, переключимся на процедурные языки....
27 янв 04, 13:05    [508342]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить