|
|
|
|
|
SQL для профессионалов и для простых смертных |
|
|
Джо Селко
SQL для профессионалов. Программирование
М:. Издательство "Лори" (www.lory-press.ru), 456 стр., 70x100/16, 2004, тир.1500, ISBN 5-85582-219-2,
переводчик И.Афанасьев, научный редактор А.Вендров.
Аннотация от издательства “Лори”: http://www.lory-press.ru/book.php?id=191
Оригинал : SQL for smarties: advaced SQL programming. Second edition. Joe Selco. Morgan Kaufmann Publishers, San Francisco, 2000, ISBN-0-55860-576-2 |
|
М.Дж.Хернандес,
Дж.Л.Вьескас
SQL-запросы для простых смертных.
Практическое руководство по манипулированию данными в SQL
М:. Издательство "Лори" (www.lory-press.ru), 480 стр., 70x100/16, 2004, тир.3200, ISBN 5-85582-178-1,
переводчики А.Головко, научный редактор А.Киселева.
Аннотация от издательства “Лори”: http://www.lory-press.ru/book.php?id=98
Оригинал : SQL Queries for Mere Mortales. A Hands-On Guide to Data Manipulation in SQL, by Michael J.Hernandez, John L.Viescas. ADDISON-WESLEY, Pearson Education,2000,ISBN-0-201-43336-2 |
Год назад в рецензии «SQL и SQLJ - две ступени одной лестницы» мы писали о книгах, написанными о как бы начальной (“SQL-запросы для простых смертных”) и одной из вершинных («ORACLE9i. Программирование на языке SQLJ») ступенях технологической лестницы программирования при разработке приложений на непроцедурных языках, а именно, SQL. Сегодня к этой лестнице прибавляется еще одна книга-ступенька - «Программирование на SQL для профессионалов». И поскольку эта «ступенька» следует за начальным курсом по языку SQL, мы для того, чтобы опереться и показать, чем же «… для профессионалов» отличается от «… для простых смертных», сочли возможным повторить в этом опусе несколько итоговых, результирующих предложений из старой рецензии, посвященных первой ступени в SQL-программировании.
Итак, “SQL-запросы для простых смертных” – это учебник, который можно использовать также и в качестве справочника по базовому языку SQL, а точнее, по его самому “красивому” и мощному SQL-оператору SELECT. Не даром же книга названа “SQL-запросы для простых смертных”, а SQL-запрос – это и есть предложение выборки записей из базы, то есть SELECT. Редко можно увидеть такое тщательное, подробное и последовательное развитие темы. Многочисленные примеры преобразования запросов с живого (английского) языка на программный язык SELECT-предложений читаются с удовольствием и должны снять любые опасения начинающих в плане его сложности или навороченности.
Опытных разработчиков, несомненно, в первую очередь привлекут главы о внутренних (гл.8) и внешних (гл.9) соединениях. Oracle-разработчиков следует сразу предупредить, что в книге используется ANSI-стандарт языка SQL, в котором синтаксис внутренних и внешних соединений (LEFT/RIGHT/FULL OUTER Join, INNER JOIN) несколько отличается синтаксиса, принятого в SQL от Oracle. Эти различия несущественны в Oracle 9iR2.
Интересующихся вопросом различий синтаксиса внутренних и внешних соединений мы адресуем к статье Jim Czuprynski “Getting ANSI About Joins” (http://www.databasejournal.com/features/oracle/article.php/2209301).
В программистской литературе на русском языке, похоже, не было еще такой почти 500-страничной книги, которая была бы посвящена почти исключительно одному оператору, а именно, SELECT. В этом можно усмотреть определенную сложность для начинающих – ведь язык SQL состоит не только из оператора SELECT, а о языках собственно Манипулирования Данными (DML с операторами INSERT, UPDATE, DELETE), Определения Данных (DDL с операторами CREATE, ALTER, DROP,…), Управления Данными (DСL с операторами COMMIT, ROLLBACK, SET,…) в тексте книги нет ни слова. Справедливости ради, отметим, что в этом нет ничего удивительного - ведь сложность оператора SELECT превосходит сложность всех других вместе взятых операторов манипулирования данными (INSERT, UPDATE, DELETE), которые, в свою очередь, могут включать SELECT-подзапросы.
Полностью рецензия «SQL и SQLJ - две ступени одной лестницы» находится по адресу http://www.oracle.com/global/ru/oramag/aug2003/general_lory_sql.html, а аннотация и полное содержание книги - по адресу http://www.lory-press.ru/book.php?id=98).
Теперь перейдем к главному предмету рассмотрения – книге Джо Селко "Программирование на SQL для профессионалов".
С самого начала надо повторить сделанное выше предупреждение, что эта книга, как и “SQL-запросы для простых смертных”, рассказывает о языке SQL в ANSI-стандартах SQL-89 и SQL-92, которые отличаются от языка SQL, принятого, например, в базах данных Oracle. SQL от Oracle, с одной стороны, расширяет ANSI-стандарт, а, с другой, - не всегда содержит абсолютно все его конструкции. И поэтому книга Джо Селко пригодна для всех SQL-профессионалов как для разработчиков приложений, так и администраторов всех SQL-баз данных (не только Oracle). Мы уверены, что любой профессиональный специалист, применяющий SQL, без особого труда и раздражения увидит различающиеся конструкции стандарта и конкретной применяемой реализации, сумеет их преодолеть в своей работе, а иногда и порадуется (как в случае с Oracle Database) расширениям, выходящим за рамки стандарта.
«Предполагается, что у читателя имеется хотя бы год практической работы.» - Уже в первом абзаце введения Джо Силко определяет, что его книга «предназначена для программистов SQL, желающих усовершенствовать свои знания путем освоения новых технологий и приемов программирования.» Поэтому, опуская присущие многим другим книгам вводные, исторические, объясняющие и, так скажем, «простые» положения, автор сразу начинает профессиональный разговор с читателем на четком и понятном техническом языке. (А рецензенты добавят, что язык книги отличается высокой литературностью, что необходимо поставить в заслугу не только ее автору, но и переводчику и редакторам книги.) Например, на трех страничках «Введения» ясно и очень коротко автор изложил различия процедурных и непроцедурных (SQL) языков, а также свои «Советы по программированию», задав, тем самым, уровень знакомства с предметом, на который нужно ориентироваться читателям.
Начинается книга с «Проектирования базы данных», где называются и определяются основные понятия (схема, таблица (и связанные с ней DDL операторы), столбцы (и ограничения на них),…), но и в этом как бы обязательном для любой SQL-книги тексте содержатся изюминки. Например, различия файлов и таблиц (не все же читатели – АБД от Oracle, которым это должно быть вбито в сознание раз и навсегда) или «Примечание относительно дубликатов строк».
Вторая глава «Нормализация» является подлинным украшением книги, где на двадцати с небольшим страницах приводятся:
-
первая нормальная форма (1NF);
- вторая нормальная форма (2NF);
- третья нормальная форма (3NF);
- CASE-средства для нормализации;
- нормальная форма Бойса-Кодда (BCNF);
- четвертая нормальная форма (4NF);
- пятая нормальная форма (5 NF);
- нормальная форма «домен-ключ» (DKNF);
- практические советы по нормализации;
- практические советы по денормализации.
Все ли наши читатели смогут вспомнить эти нормальные формы?! Ну, скажем, что для большинства это, может быть, и не надо, но знать источник, где это четко, понятно и коротко описано, по нашему мнению, необходимо.
Конечно, объем рецензии не позволяет с так подробно представлять каждую главу, но достаточно перечислить названия некоторых разделов, чтобы «желающий усовершенствовать свои знания» читатель, которому предназначена книга, понял, какие мощные в ней заложены знания, какие сведения он может почерпнуть.
- «Числовые данные в языке SQL», «Типы данных времени в стандарте SQL», «Символьные типы данных в SQL»;
- «Неопределенные значения - отсутствующие данные в SQL» – речь идет о Null-значениях;
- «Сравнения или операции Theta»;
- «Предикаты значений», «Предикаты LIKE и SIMILAR», «Предикаты BETWEEN и OVERLAPS», «Предикат [NOT] IN», «Предикат EXISTS()»;
- «Кванторизированные предикаты подзапросов»;
- «Представления и временные таблицы»;
- «Агрегативные функции»;
- «Статистическая обработка информации в SQL»;
- «Структуры массивов в языке SQL»;
- «Операции со множествами», «Подмножества»;
- «Модель списка смежных вершин деревьев в SQL» и «Модель вложенных множеств деревьев в SQL»;
- «Графы в SQL»
- всего 31 глава от 10 до 20 страниц каждая (самая большая глава на 40 стр., конечно, «Оператор SELECT»).
Несколько раз в книге приводятся и сравниваются различные решения одной и той же задачи, что делает работу с ней увлекательным и еще более познавательным делом. Например, «задача о распределении классных комнат учебным группам (class_size < room_size)» cначала решается как бы обычным образом, а потом приводятся «Хорватское решение», «Шведское решение» и «Колумбийское решение» (стр. 210-218). Читая книгу, бросается в глаза, что в ней очень часты ссылки на основополагающие работы Э.Кодда (E.Codd), К.Дейта (K.Date) и др. При этом автор иногда спорит с авторитетами, приводя конкретные примеры недостаточности конструкций классической теории реляционных баз данных, например, в уже упоминавшемся «Примечании относительно дубликатов строк».
Как в «старых и добрых времен» научной книге в «SQL для профессионалов» почти 20 страниц отведено на библиографию, ссылки и указатель рекомендуемой литературы. Жаль, конечно, что верхний временной предел ограничен 2000 годом, ведь за последние несколько лет количество книг по программированию выросло многократно. Но надо полагать, что первая на русском языке книга Джо Селко – не есть последняя, и, доверяя пунктуальности автора, можно надеяться на исчерпывающий библиографический указатель в следующий раз.
В рецензии положено говорить не только о достоинствах произведения, но и о недостатках. Вряд ли их так уж много, но на одну досадную корявость все же следует обратить внимание. Цитата (стр.13): «Компания Oracle позволяет использовать физический адрес строки на жестком диске – это специальная переменная под названием ROWID… Однако такая реализация физической структуры на логическом уровне требует использования для строк таблицы сплошного дискового пространства. Это приводит к невозможности работы с хешированными, распределенными БД, … или невозможности реализации любыхновых технологий работы с БД большого объема (VLDB).» Собственно говоря, это настолько существенное незнание архитектуры базы данных именно СУБД Oracle, что, скорее всего, следует грешить на неправильный перевод, но этот же пассаж указывает на те полезные расширения (как например, псевдостолбец ROWID), которые Oracle внес в свою реализацию SQL.
Общий вывод: книга Джо Селко «Программирование на SQL для профессионалов» очень полезна для всех разработчиков приложений на SQL, работающих на самых разных SQL-базах данных: Oracle, Sybase, MS SQL Server и многих других. Особенно стоит ее рекомендовать преподавателям программистских дисциплин в ВУЗах и студентам старших курсов, так как SQL-решения и другие вопросы, излагаемые в книге, не зависят от привязки к конкретным СУБД, но рассматриваются в их концептуальной сути.
Виктор Абрамов,
научный редактор "Oracle Magazine/Русское Издание"
Анатолий Бачин,
главный редактор "Oracle Magazine/Русское Издание"
|
|
|
|