Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Различия в серверах баз данных


Автор: rcdimon 27.8.2007, 20:19
Всем привет.

Мне необходимо написать программу, которая должна уметь работать с различными базами даннх. Для этого все запросы за данными из базы направляются в специальный модуль, который знает с какой базой он работает и компилирует запрос к серверу баз данных в соотвествии с конкретным синтаксисом.

Я знаком только с SQL, поэтому прощу помочь мне в поиске различий между базами.

Автор: DimW 28.8.2007, 08:27
Цитата(rcdimon @  27.8.2007,  20:19 Найти цитируемый пост)
Я знаком только с SQL

собственно в нем и различие.
к примеру этот запрос в ms sql вернет колличество строк из таблицы test_teble:
Код

select count(*) from test_teble where null = null

т.е. условие null = null для этого сервера правдиво.

а в оракле этот же запрос вернет 0 строк, т.к. для него условие null = null ложно (ничего не может быть равно ничему...)
для оравла следует записать запрос так:
Код

select count(*) from test_teble where null is null


таких принципиальных различий между серверами огромное количество, к тому же постоянно добавляются новые конструкции sql. это очень сложная задача, на которую я бы не тратил свое время. имхо в одиночку и без хорошего финансирования не стравиться. лучше подумайте над тем как перенести данные в обну БД.


Автор: DimW 28.8.2007, 12:08
еще как пример, в оракле допускается конструкция:
Код

select id, name 
from test_table
where (id, name) in (select id, name from test_table2)

т.е. поле id таблицы test_table сравнивается с набором значений поля id из test_table2, а name c name.

не знаю в каких серверах такая конструкция поддерживается, но факт что не во многих, поэтому вам нужно будет для другова сервера перепесать запрос так:
Код

select id, name 
from test_table
where id in (select id from test_table2 order by id)
and name in (select name from test_table2 order by id)


Автор: SergeBS 30.8.2007, 07:49
rcdimon, 
Цитата
Мне необходимо написать программу, которая должна уметь работать с различными базами даннх.

Невозможно. Либо есть конкретные БД с их структурами и есть задача - что должна делать программа, либо имеем "сферического коня в вакууме". Прочитай FAQ-и для начала - поймешь сам.

Автор: DimW 30.8.2007, 08:19
Цитата(SergeBS @  30.8.2007,  07:49 Найти цитируемый пост)
либо имеем "сферического коня в вакууме"

на самом деле такие кони есть в природе, такой софт широко используется в хранилищах данных, как правело этим инструментам по барабану с каким источником данных работать, будь то БД или csv.
Но т.к. задачей этих инструментов является вывод отчетности, то их реализация не настолько сложна, по сравнению с задачей rcdimon. К таму же эти инструменты не позволяют пользователям напрямую писать запросы, а если и позволяют то синтаксис очень специфичен.

Автор: Deniz 31.8.2007, 05:45
Цитата(DimW @  30.8.2007,  11:19 Найти цитируемый пост)
Но т.к. задачей этих инструментов является вывод отчетности, то их реализация не настолько сложна ...

Позвольте не согласиться.
Как пример SAP R/3 (Это конечно монстр, но все же). Можно работать с многими БД и переход на MSSQL, Oracle, DB2 и т.д. не составляет большой проблемы.
И функциональность там ...
И SQL запросы можно писать, и даже свой язык программирования, но вот этот SQL сильно подрезанный.

Автор: SergeBS 31.8.2007, 08:22
DimW, 
Deniz, 
Давайте не будем путать программу (вещь прикладную) и средства разработки СУБД и отчетов. ErWin (например) с кучей всяких СУБД может работать, но он не предназначен для юзеров. И не только он. 
Писать средство разработки в одиночку - смешно, годы понадобятся. Писать средство вывода отчетов - да пожалуйста, только при этом надо-таки знать - какие юзеру отчеты нужны. А иначе - Crystal Reports ему в руки и нехай ваяет что хочет. Например. Или взять FastReport - у него есть возможность включить средство построения отчетов.
Или очень хочется свое такого духа наваять? Ну флаг в руки. Через 1-2 года что-то может получится.
Но вряд ли. По вопросу достаточно просто определяется квалификация спрашивающего: без обид, это просто факт - "Чтобы правильно задать вопрос нужно знать половину ответа"(С) не знаю чей.

Автор: DimW 3.9.2007, 07:18
2 SergeBS
Цитата(SergeBS @  31.8.2007,  08:22 Найти цитируемый пост)
Давайте не будем путать

я ничего не путаю, те средства о которых я говорю позволяют именно юзеру строить ту отчетность которая ему нужна.
 
Цитата(SergeBS @  31.8.2007,  08:22 Найти цитируемый пост)
средства разработки СУБД

а вот вы путаете сервер БД с логической структурой.

Цитата(SergeBS @  31.8.2007,  08:22 Найти цитируемый пост)
Или очень хочется свое такого духа наваять? Ну флаг в руки.

поверьте, я не пытаюсь ни кого ни вчем убедить, я просто привел реальные траблы которые могут возникнуть при написании такова средства, и то что такие средства существуют.

Цитата(SergeBS @  31.8.2007,  08:22 Найти цитируемый пост)
Писать средство разработки в одиночку - смешно, годы понадобятся.

наверное в спешке пропустили...
Цитата(DimW @  28.8.2007,  08:27 Найти цитируемый пост)
имхо в одиночку и без хорошего финансирования не стравиться.



Автор: SergeBS 3.9.2007, 10:59
DimW, 
Цитата
я ничего не путаю, те средства о которых я говорю позволяют именно юзеру строить ту отчетность которая ему нужна.

Т.е. юзер должен знать SQL? Или Crystal Reports? И НАПРЯМУЮ работать с таблицами? Ну-ну. Крутые у вас юзеры... Мне такие почему-то не попадаются. А попадаются такие, что в 3-х кнопках и с инструкцией на 1 листке плутают, вместо файла на дискету/флешку/по email отправляют его ярлык. И т.п.
Цитата
а вот вы путаете сервер БД с логической структурой.

Еще раз:
Цитата
Либо есть конкретные БД с их структурами и есть задача - что должна делать программа, либо имеем "сферического коня в вакууме".

Т.е. если неизвестно, с какими данными что нужно делать, то и ничего не сделаешь. Нет задачи. А какая СУБД - не так уж и важно. Из Dbf-ки всегда можно импортировать данные в таблицу SQL-сервера, и наоборот...

Автор: DimW 3.9.2007, 12:04
Цитата(SergeBS @  3.9.2007,  10:59 Найти цитируемый пост)
Т.е. юзер должен знать SQL?

вовсе нет:
Цитата(DimW @  30.8.2007,  08:19 Найти цитируемый пост)
К тому же эти инструменты не позволяют пользователям напрямую писать запросы

роль программиста заключается в том чтобы предоставить пользователю данные, пусть то сводная таблица или вьюха, а пользователь уже сам решает какие данные ему юзать из этого источника, причем все шаблоны конкретного пользователя сохраняются как его собственные. Естественно о сложной по структуре отчетности и речи быть не может, зачастую это обычные линейные отчеты с группировкой и сортировкой которые определяются все тем же юзером.

Цитата(SergeBS @  3.9.2007,  10:59 Найти цитируемый пост)
Ну-ну. Крутые у вас юзеры...


SergeBS, поверьте естьт такие, т.е. они точно знают какие данные должен им подготовить программист, а набор полей, группировки, объединения источников, сортировки, они определяют сами.

Цитата(SergeBS @  3.9.2007,  10:59 Найти цитируемый пост)
Или Crystal Reports?

естественно что без репортеров такова рода не обойтись когда речь идет о строгой отчетности, а в остольном (то что я описал выше) к примеру инструмент DataStage (один из инструментов о котором я говорю) позволяет дать пользователю возможность получать данные в том виде в котором они ему нужны. Такие инструменты являютяся своего рода прослойками между физическими данными и человеком который ими пользуется, и "пользователю" чаще всего наплевать как физически данные храняться, в одной или в нескольких БД. 

думаю на сей раз моя точка зрения понятна.

Автор: batigoal 6.9.2007, 13:35
Цитата(Deniz @  31.8.2007,  06:45 Найти цитируемый пост)
И SQL запросы можно писать, и даже свой язык программирования, но вот этот SQL сильно подрезанный. 

Ну не факт, кстати. Встроенный в ABAP SQL делится на Native и еще какой-то, не помню терминологии. И если второй, действительно, обрезан до DML, то первый вообще передается непосредственно базе, поэтому никаких ограничений нет.

Теперь по теме. rcdimon, а на каком языке планируешь писать своё приложение? Ведь и в Java, и в большинстве других языков есть средства абстрагирования от конкретной базы и SQL-диалекта (Hibernate, JTA...). Велосипед уже изобретён, можно взять имеющийся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)