Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, bizhan, Вы писали:
B>>Как любят говорить местные апологеты MSSQL — "ты просто не умеешь их готовить"
А>Никак не причисляя себя к апологетам MSSQL, хочу сказать, что я просто ел то, что, как мне показалось, слаще редиски(Developer Suite). Причем почему то всем составлющим этой редиски есть более вкусная альтернатива .
Скажи мне альтернативу формсам?-) Я хочу быстро и качественно делать БД-приложения, причем, если мне надо будет переносить его под веб, то чтобы я ничего не делал вообще, а оно само )
А>А вот то, что пишет Oracle и это НЕ имеет GUI —
У них есть штука, которая мне понравилась — Oracle WorkFlow.
Правда это купленная штука, но все равно.
Павел
Re[8]: Сравнение Oracle и MSSQL
От:
Аноним
Дата:
09.01.04 07:28
Оценка:
M>Чтобы было проще, и более предметно. M>Набросайте мне, если не сложно, небольшую процедуру на яве, которая делает джойн двух абстрактных табличек, желательно с использованием какой-нибудь подсказки оптимизатору, например, чтобы он использовал определенный индекс.
создается 2 курсора, в цикле оба фетчатся в массивы джавы. далее происходит "джоин" массивов и возвращается 3й массив ... движек SQL используется только для создания курсора, т.к. поросто нет другой конструкции создания курсора. т.е. всю обработку данных (не просто бизнес логику) можно выполнить джавой. вопрос на сколько это эфективно для данной задачи мне не важно.
фокспро/клипер имел только (!) процедурный язык для обработки данных, SQL это все-го лишь один из 3х (+ pl/sql, java) движков в оракле, который ими во всю используется, для решения многих задач.
у меня встречная просба — выдайте мне ANSI SQL92 — для обстрактной таблички работников и зарплаты, нужно получить колонки со средней зарплатой, и сумой, вышестоящих, типа:
1. Иванов 100 100 100
2. Петров 70 85 170
3. Сидоров 60 76 230
p.s. для тех кто непонял — встречаются задачи обработки данных которые решить SQL или невозможно или сложно.
B>Скажи мне альтернативу формсам?-)
Delphi, VFP, PowerBuilder. Тот же .NET
B>Я хочу быстро и качественно делать БД-приложения, причем, если мне надо будет B>переносить его под веб, то чтобы я ничего не делал вообще, а оно само )
Ну это да, есть такое. Но, IMHO, писать одно и то же приложение как под Win, так и под Web — это сознательно ограничивать себя убогими средствами Web. Все таки в системе должен быть презентативный слой — один — с качественным ГУИ — для Win. Другой — с убогим — для Web.
Спасибо за внимание.
Re[8]: Сравнение Oracle и MSSQL
От:
Аноним
Дата:
09.01.04 08:20
Оценка:
А>>вопрос провакационный — PHP язык для работы с реляционными данными M>PHP никакого отношения к реляционным языкам не имеет.
А>> и что будет если я его для работы с транзакциями начну юзать а ? M>А транзакции здесь причем? M>Заканчивай красивые слова не к месту употреблять, уже даже не смешно... Ты мешаешь все понятия в одну кучу из разных областей, совершенно не делая между ними различия. M>Ты действительно разницы не понимаешь или просто веселишься?
веселюсь
опять же боюсь ты не поверишь но пхп уже две субд воткнули как язык сторед процедур и тригеров — Posgres и MySql 5.0
PHP (Personal Homepage Processor) предназначался для лобания страничек, а не "для работы с реляционными данными" ну и что ?
да чихать я хотел для чего язык создавался — важно какие проблемы и на сколько эфективно я смогу решить с помощью языка. к стате например процедурным языком фокспро когда-то было эфективней джойнить чем юзать их ущербный SQL движек.
SQL один из многих языков для обработки данных, просто от лучше всех подходит для большинства задач!
А>>боюсь мнение мое тут никому и не нужно M>Мне нужно не твое мнение, а хотя бы примерно составить свое мнение о твоих знаниях, чтобы было понятно каким образом дальше разговор строить. Пока складывается такое впечатление, что ты путаешься даже в базовых терминах.
постить сюда msdn и оракловые недосуг
M>Возможность написать бизнес логику непосредственно на сервере используя специально предназначаный для этого инструментарий: Java, etc.
чо-то непонял этой возможности для T-SQL нет ? или инстрементария нет ?
ну про сиквел я не знаю, зато знаю про Posgres и Sybase — там есть инструментарии, есть языки, причем у обоих есть несколько (у Sybase диалекты, у Posgres pgSQL, pgPL/SQL, pgPHP), знаю люди на сайбэзе пишут бухгалтерию, т.е. обсалютно вся логика на сервере — так что это теперь это апп-сервер докучи ?
А>>мда ... ваши познания оракла впечатляют ... А>>select sum(sal) over (order by depno range 100 preceding) ... M>Так к чему это? Это теперь так определения выглядят? Я так и не увидел определения на аналитическую функцию или ссылки на него.
Здравствуйте, Victor Repetsky, Вы писали:
VR>Здравствуйте, Merle, Вы писали:
VR>Это задача не для Java, конечно, здесь один SQL. VR>Тем не менее задач которые решает Java в хранимых процедурах и тригерах не так уж мало. Например в тригере может понадобится VR>-зашифровать или проанализировать данные ипользуюя какую-либо существующую библиотеку VR>-открыть сетевое соединение (хоть сокеты, хоть веб-сервисы) и сообщить куда следует VR>-соконнектиться и что-то сделать в другой базе (например из Oracle в Interbase)
Полностью согласен, с одним добавлением: все эти операции выполняются в десятки раз быстрее на яве, чем такое же на pl/sql.
Здравствуйте, aston, Вы писали:
A>Ну это да, есть такое. Но, IMHO, писать одно и то же приложение как под Win, так и под Web — это сознательно ограничивать себя убогими средствами Web. Все таки в системе должен быть презентативный слой — один — с качественным ГУИ — для Win. Другой — с убогим — для Web.
Почему убогим? Ты наверное не видел, что можно делать на Forms. Никакого отличия, разве, что клиент с качественным UI грузится в окне браузера. И причем это совсем не обязательно. Можно и в отдельное окно все вывести. Слышал наверное о таких понятиях как "Апплеты"?
Здравствуйте, Merle, Вы писали:
M>Здравствуйте, <Аноним>, Вы писали:
А>>открою страшную тайну .. ява (java) используется как язык сторед процедур, и не поверишь ... тригеров СУБД M>Внимание вопрос знатокам. Для чего он там используется?
M>Чтобы было проще, и более предметно. M>Набросайте мне, если не сложно, небольшую процедуру на яве, которая делает джойн двух абстрактных табличек, желательно с использованием какой-нибудь подсказки оптимизатору, например, чтобы он использовал определенный индекс.
Да ну его спорить с ним, Иван. Ни к чему конструктивному это не приведет. Ну не знает человек, какие роли играют апп-сервер и дата-сервер в теоретической модели многоуровневых приложений. И боюсь, переубедить его мы не сможем. Ничего, выйдет юкон — проще будет. Хотя тогда скорее всего начнется бой насмерть — апологеты МССКЛ начнут кричать ура, а апологеты оракл — "у нас это еще когда было!". Но по крайней мере можно будет сравнивать две более-менее эквивалентых системы. А то получается мы сравниваем катер с пароходом, причем ты просишь ограничиться сравнением шлюпки от парохода с катером, а тебе отвечают "нифига, пароход — тоже плавсредство"
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Victor Repetsky, Вы писали:
VR>Это задача не для Java, конечно, здесь один SQL.
Что и требовалось доказать..
VR>Тем не менее задач которые решает Java в хранимых процедурах и тригерах не так уж мало. Например в тригере может понадобится VR>-зашифровать или проанализировать данные ипользуюя какую-либо существующую библиотеку VR>-открыть сетевое соединение (хоть сокеты, хоть веб-сервисы) и сообщить куда следует VR>-соконнектиться и что-то сделать в другой базе (например из Oracle в Interbase)
Естественно может, но это у же имеет мало отношения к хранению и доступу к данным, чем и занимается SQL. Более того, приложение можно спроектировать таким образом, что эта функциональность в триггере или хп. не требуется, а выносится на клиента или в средний слой, причем без потери эффективности.
Таким образом Ява — это язык описания бизнес логики, а не логики хранения реляционных данных, и непосредственно к БД имеет мало отношения.
Здравствуйте, <Аноним>, Вы писали:
А>создается 2 курсора, в цикле оба фетчатся в массивы джавы. далее происходит "джоин" массивов и возвращается 3й массив ... движек SQL используется только для создания курсора, т.к. поросто нет другой конструкции создания курсора. т.е. всю обработку данных (не просто бизнес логику) можно выполнить джавой. вопрос на сколько это эфективно для данной задачи мне не важно.
Используя подобную логику я могу утверждать, что в MSSQL'е работа через DMO — это аналог Оракловской Явы и даже круче, там вообще ни одной SQL команды не встречается.
Ява — это инструмент работы с бизнес логикой, а SQL с логикой хранения. И Бизнес логика в задачи БД не входит.
А>фокспро/клипер имел только (!) процедурный язык для обработки данных, SQL это все-го лишь один из 3х (+ pl/sql, java) движков в оракле, который ими во всю используется, для решения многих задач.
И в итоге любое, более менее сложное приложение превращается в дикую смесь из этих трех языков, в которой без поллитры не разгребешся. Потому как достать данные по человечески можно только через SQL, чем движек БД и занимается и на этом БД заканчивается. А дальше начинается шаманство с PL/SQL'ем и Явой — зато все на сервере.
А>у меня встречная просба — выдайте мне ANSI SQL92 — для обстрактной таблички работников и зарплаты, нужно получить колонки со средней зарплатой, и сумой, вышестоящих, типа: А>1. Иванов 100 100 100 А>2. Петров 70 85 170 А>3. Сидоров 60 76 230
А каким образом организованы эти абстрактные таблички работников и зарплаты?
В любом случае операторов SUM, AVG и GROUP BY никто не отменял.
А>p.s. для тех кто непонял — встречаются задачи обработки данных которые решить SQL или невозможно или сложно.
Для тех кто не понял — обработка — это бизнес логика, а SQL и БД — это хранение.
Здравствуйте, <Аноним>, Вы писали:
А>веселюсь
Хм.. Как-то не очень удачно получается.
А>опять же боюсь ты не поверишь но пхп уже две субд воткнули как язык сторед процедур и тригеров — Posgres и MySql 5.0
Ага, как замену SQL? Не смешите мои тапочки.
А>PHP (Personal Homepage Processor) предназначался для лобания страничек, а не "для работы с реляционными данными" ну и что ?
Ну вот и лабайте на нем странички.
А>да чихать я хотел для чего язык создавался — важно какие проблемы и на сколько эфективно я смогу решить с помощью языка.
О! Так как мне с помошью ПХП джоин двух таблиц сделать? Или запись в БД вставить? Только эффективно.
А>SQL один из многих языков для обработки данных, просто от лучше всех подходит для большинства задач!
Не обработки. Обработка — это бизнес логика. SQL — это хранение.
А>чо-то непонял этой возможности для T-SQL нет ? или инстрементария нет ?
Я могу повторить еще раз, что T-SQL не предназначен для описания бизнес-логики. Как вообщем и стандарт SQL и Оракловский SQL и любой другой диалект SQL'я. Он просто не для этого создавался.
MSSQL предполагает реализацию БЛ на клиенте, Оракл — на сервере с помощю Явы и всего остального. И реализация БЛ выходит за рамки БД, это уже не сервер хранения, а сервер обработки данных получается.
А>ну про сиквел я не знаю, зато знаю про Posgres и Sybase — там есть инструментарии, есть языки, причем у обоих есть несколько (у Sybase диалекты, у Posgres pgSQL, pgPL/SQL, pgPHP), знаю люди на сайбэзе пишут бухгалтерию, т.е. обсалютно вся логика на сервере — так что это теперь это апп-сервер докучи ?
Я еще я знаю, есть люди, которые микроскопом гвозди заколачивают, и довольно ловко.
А>ну как же так ? на днях это как стандарт ANSI SQL утвердят, а вы еще не слышали
Не слышал? Я не слышал, что Вы имеете ввиду под аналитическими функциями.
А>http://otn.oracle.com/products/bi/pdf/o9i_analyticsql_twp.pdf
А, то есть утверждается, что в MSSQL этого нет? Увы, есть и уже довольно давно.
Здравствуйте, Merle, Вы писали:
M>Таким образом Ява — это язык описания бизнес логики, а не логики хранения реляционных данных, и непосредственно к БД имеет мало отношения.
Итого Вы утверждаете
1. На Java лучше реляционные операции не делать, делать их на SQL или PL/SQL.
2. На SQL или PL/SQL бизнес логику делать нельзя лучше на Java.
3. В хранимых процедурах и тригерах бизнес-логику делать нельзя.
Отсюда логичный вывод что в хранимых процедурах и тригерах Jav-е не место.
С 1. согласен, за исключением _очень_ редких случаев если не голого SQL то PL/SQL для реляционных задач хватает с головой, они (языки) собственно десятилетиями для этого и разрабатывались. Про исключения хорошо пишет, например, Дейт.
По 2-3. это мнение популярное и распростаненное но не единственное. Например, дока к 7 Ораклу утверждает что серверная бизнес логика обязана быть в хранимых PL/SQL процедурах (а Oracle — это не просто db-сервер, а db-app сервер). Нужна ли полноценная 3-х уровневая архитектура зависит от задачи. Для широкого куруга бизнес приложений — да, но ими жизнь не ограничивается. Нельзя всех стричь под одну гребенку, это такая же крайность как и везде игнорировать mainstream-методы проектировния. Кроме вопросов проектирования не нужно забывать о производительности. Например, недвно сталкивался с задачей вставики сущности в сложную базу (~50 таблиц), куча логики и проверок не выражаемых ограничениями целостности, много ветвлений, алгоритм на PL/SQL занял 4 страницы, если это же все делалось бы на EJB (или COM/MTS), то за один раз бы создавалось пара сотен объектов. Задача была критична по времени выполнения, поэтому PL/SQL — единственное решение. То же и по Java, я приводил примеры где она может понадбится. Пропорции использования определяются опять же задачей.
Ситуация похожа, например, на то что в Java или .NET оставляют возможность вызова native-кода.
Всего хорошего.
Виктор.
SCJP, SCEA
Re[10]: Сравнение Oracle и MSSQL
От:
Аноним
Дата:
09.01.04 13:02
Оценка:
А>>создается 2 курсора, в цикле оба фетчатся в массивы джавы. далее происходит "джоин" массивов и возвращается 3й массив ... движек SQL используется только для создания курсора, т.к. поросто нет другой конструкции создания курсора. т.е. всю обработку данных (не просто бизнес логику) можно выполнить джавой. вопрос на сколько это эфективно для данной задачи мне не важно. M>Используя подобную логику я могу утверждать, что в MSSQL'е работа через DMO — это аналог Оракловской Явы и даже круче, там вообще ни одной SQL команды не встречается.
вы меня удивляете с каждым постом неужели вы не в курсе что jvm в оракле встроена и выполняется на сервере как его процесс, в памяти сервера (SGA), а это значит, что не происходит (практически) переключений контескта в ОС.
В M$ такого нет, и появится разве что в Юконе.
M>Ява — это инструмент работы с бизнес логикой, а SQL с логикой хранения. И Бизнес логика в задачи БД не входит.
мда ... сурьезная заявка на победу, тогда давайте разберемся, что же у нас логика а что субд.
1. что такое репликация? входит не входит она в задачи субд, если да то каким местом (забегая в перед скажу что реализована она на pl/sql)
2. стандартные функции для работы с сетью и майлами (UTL_TCP, UTL_SMTP) (забегая в перед скажу что реализована она на java)
3. при накладывания патча 9.2.0.4 на сервере выполняется джава процедура, которая корежит системные словари БД.
M>И в итоге любое, более менее сложное приложение превращается в дикую смесь из этих трех языков, в которой без поллитры не разгребешся. Потому как достать данные по человечески можно только через SQL, чем движек БД и занимается и на этом БД заканчивается. А дальше начинается шаманство с PL/SQL'ем и Явой — зато все на сервере.
А>>у меня встречная просба — выдайте мне ANSI SQL92 — для обстрактной таблички работников и зарплаты, нужно получить колонки со средней зарплатой, и сумой, вышестоящих, типа: А>>1. Иванов 100 100 100 А>>2. Петров 70 85 170 А>>3. Сидоров 60 76 230 M>А каким образом организованы эти абстрактные таблички работников и зарплаты?
1. Иванов 100
2. Петров 70
3. Сидоров 60
тогда в результе 3 колонка — среднее, 4я — сумма, всех вышестоящих. M>В любом случае операторов SUM, AVG и GROUP BY никто не отменял.
sum и avg не спасут
в сиквеле нет аналитических функций.
Здравствуйте, Victor Repetsky, Вы писали:
VR>Итого Вы утверждаете VR>1. На Java лучше реляционные операции не делать, делать их на SQL или PL/SQL.
Угу.
VR>2. На SQL или PL/SQL бизнес логику делать нельзя лучше на Java.
Вообщем да. Или любом другом языке нарошно для этого придуманом. На самом деле в дурацком =) английском языке есть два понятия layer и teir. Одно из них служит для описания логического слоя приложения, а другое — физического. Понятно, что идеала не существует и часть логического business layer'а как правило реализуется на SQL'е, но основная логика все равно ложится на код написанный на "более другом языке".
VR>3. В хранимых процедурах и тригерах бизнес-логику делать нельзя. VR>Отсюда логичный вывод что в хранимых процедурах и тригерах Jav-е не место.
Ну, пожалуй не так категорично, это уже больше вопрос проектирования и конкретной задачи.
Предыстория спора такова: мой оппонент утверждает что:
1. на T-SQL нельзя нормально работать, нельзя описать на нем бизнес-логику -> 2. Это есть недостаток MSSQL -> 3. У Оракла преимущество ввиду наличия Java.
А собственно мой поинт заключается в:
1. на T-SQL нельзя делать то, для чего он не предназначен, для операций же с реляционными данными он подходит очень и очень хорошо, а все остальное на нем делать просто не надо. Этот язык попросту не предназначен для описания БЛ.
2. Это не есть недостаток. Это просто другая концепция. Оракл предоставляет возможность описания БЛ в рамках сервера БД, MS(в текущей версии) предполагает, что лучше описывать БЛ в другом месте. Благо возможностей по написанию среднего слоя и клиентов MS предоставляет больше всех в индустрии, поэтому они не посчитали неободимым встраивать это в сервер.
3. С точки зрения СУБД ("чистой" СУБД, без app-заморочек), наличие Явы не есть преимущество, так как непосредственно задачами БД Ява не занимается и никаких плюсов не дает.
Если же рассматривать только Оракл, я еще раз повторюсь, то это безусловно вопрос архитектуры конкретного приложения.
VR>(а Oracle — это не просто db-сервер, а db-app сервер).
[+]
Именно это я и утверждал. Собственно это еще одна причина спора.
VR> Нужна ли полноценная 3-х уровневая архитектура зависит от задачи. Для широкого куруга бизнес приложений — да, но ими жизнь не ограничивается. Нельзя всех стричь под одну гребенку, это такая же крайность как и везде игнорировать mainstream-методы проектировния.
[+]
... [RSDN@Home 1.1.0 stable]
Мы уже победили, просто это еще не так заметно...
Re[11]: Сравнение Oracle и MSSQL
От:
Аноним
Дата:
09.01.04 13:41
Оценка:
Здравствуйте, Аноним, Вы писали:
А>1. Иванов 100 А>2. Петров 70 А>3. Сидоров 60
select
w1.name,
w1.salary,
w2.sum,
w2.sum / w2.count avg
from
workers w1,
(
select w1.name, sum(w2.salary) sum, count(w2.name) count
from workers w1, workers w2
where w2.salary >= w1.salary
group by w1.name
) w2
where
w1.name = w2.name
Hе секрет, что rollback надо делать пореже,
Лучше делать почаще commit!
Я программой своей скоро сервер повешу —
У админа пускай голова поболит.
Под крики о кастрации,
В обкуренной прострации,
Как следствие мутации
Рождается в момент
Rollback segment для маленькой,
Для маленькой такой транзакции,
Для скромной такой транзакции
Огромный такой сегмент!
Hе секрет, что rollback — это язва и грыжа,
Геморрой и чуть-чуть гайморит.
Если ты программист, а не ослик бесстыжий —
Лучше делай почаще commit!
Припев.
Hе секрет, что друзьям тоже надо ресурсы,
Hадо память, процессор и диск...
Так что делай commit, а иначе... ты в курсе,
Что rollback — для тебя неоправданный риск.
Здравствуйте, theOne, Вы писали:
O>Почему убогим? Ты наверное не видел, что можно делать на Forms. Никакого отличия, разве, что клиент с качественным UI грузится в окне браузера. И причем это совсем не обязательно. Можно и в отдельное окно все вывести. Слышал наверное о таких понятиях как "Апплеты"?
Слышал, слышал. Они еще сами скачиваются на клиентов. А еще я слышал понятие "ActiveX в HTML-страницах". Только по вполне понятным причинам в диком виде эти вещи не используются. А как тогда сделать нормальный GUI в Web-страницах без Java-апплетов и ActiveX-контролов?.
Здравствуйте, Merle, Вы писали:
M>Чтобы было проще, и более предметно. M>Набросайте мне, если не сложно, небольшую процедуру на яве, которая делает джойн двух абстрактных табличек, желательно с использованием какой-нибудь подсказки оптимизатору, например, чтобы он использовал определенный индекс.
Зря вы так.
В Оракловской Яве есть такая штука SQLJ. Так что тут проблем не будет точно. Примерный код
.import java.sql.*;
/**
This is what we have to do in SQLJ
**/public class SimpleDemoSQLJ // line 6
{
//TO DO: make a main that calls thispublic Address getEmployeeAddress(int empno) // line 10throws SQLException
{
Address addr; // line 13
#sql { SELECT office_addr INTO :addr FROM employees
WHERE empnumber = :empno };
return addr;
}
// line 18public Address updateAddress(Address addr)
throws SQLException
{
#sql addr = { VALUES(UPDATE_ADDRESS(:addr)) }; // line 22return addr;
}
}
Здравствуйте, <Аноним>, Вы писали:
А>вы меня удивляете с каждым постом
Надеюсь, что открываю глаза на реальное положение вещей.
А> неужели вы не в курсе что jvm в оракле встроена и выполняется на сервере как его процесс, в памяти сервера (SGA), а это значит, что не происходит (практически) переключений контескта в ОС.
А какое отношение переключение контекста имеет к обсуждаемой теме?
А>В M$ такого нет, и появится разве что в Юконе.
DMO — это часть engine сервера.
А> тогда давайте разберемся, что же у нас логика а что субд.
Давно пора.
А>2. стандартные функции для работы с сетью и майлами (UTL_TCP, UTL_SMTP) (забегая в перед скажу что реализована она на java)
Это не есть логика работы с реляционными данными.
А>3. при накладывания патча 9.2.0.4 на сервере выполняется джава процедура, которая корежит системные словари БД.
При этом работа непосредственно с реляционными данным выполняется все-равно через SQL, а на Jave уже корежение этих данных в соответствии с заложенной логикой.
А>"достать данные по человечески можно только через SQL" — ну это временно, А>вот например Xquery, даже W3C считает вполне человеческим.
Напоминаю, что речь идет о реляционных данных, а XML назвать реляционным нельзя, даже обладая очень большой фантазией.
M>>А каким образом организованы эти абстрактные таблички работников и зарплаты? А>1. Иванов 100 А>2. Петров 70 А>3. Сидоров 60 А>тогда в результе 3 колонка — среднее, 4я — сумма, всех вышестоящих.
Например так:
SELECT ID, Name, Q,
(SELECT avg(Q) FROM tbl WHERE ID<=t.ID) [AVG],
(SELECT sum(Q) FROM tbl WHERE ID<=t.ID) [SUM]
FROM tbl as t ORDER BY ID
К слову, в SQL нет понтия "вышестоящий", так что задача в терминах SQL не корректна.
А>в сиквеле нет аналитических функций.
Там есть целый сервер — Analysis Services.