Крис Дейт. Введение в базы данных. Шестое издание. Киев, Диалектика, 1998.

ISBN 966-506-124-0


Владимир Пржиялковский

Независимый консультант



Киевское издательство «Диалектика» сделало большой подарок разработчикам БД, выпустив эту книгу. Она совершенно своеобразна среди литературы по базам данных. Между первым ее американским изданием (1975 г.) и шестым (1995 г.) лежит, как легко заметить 20 лет. Точка отсчета этого периода приходится на бурное становление дисциплины «базы данных» в целом и реляционной технологии баз данных в частности, а конец -- на активное обсуждение перспективности реляционного подхода и предлагаемых к нему дополнений и альтернатив. Таким образом, речь идет о книге-эпохе. На ней выросло не одно поколение зарубежных специалистов, и о ней с теплотой вспоминают все, даже первопроходцы и пропагандисты таких непохожих на описанные Дейтом технологии современных областей, как склады данных и OLAP (см. высказывания Ральфа Кимбала и других). Эта книга входит в золотой фонд литературы по информатике и по своей значимости попадает в один ряд к «Искусству программирования» Кнута, «Конструированию компиляторов» Ахо и Ульмана и немногим другим.

У киевского перевода был предшественник, выполненный в 1980 году московским издательством «Наука» со второго оригинального издания. Второй перевод сделан независимо от предшественника, которого время и сопутствующие обстоятельства сделали недостаточным для сегодняшних потребностей, как в отношении доступности, так и содержания.

Автор

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

Занимаясь реляционным подходом десятилетиями, Крис Дейт был и остался одним из немногих специалистов, наиболее глубоко понимающих его содержание, мотивировки и проблемы. Своеобразие ситуации в том, что мнения двух классиков -- своего рода Маркса и Энгельса реляционного подхода -- на создаваемую технологию в свое время разошлись по ряду вопросов. Одновременно, у Дейта сформировался критический взгляд на воплощения реляционной технологии производителями СУБД. Находясь в своего рода оппозиции меньшинства, характеризуемого определением «пуристы реляционного подхода», Дейт, тем не менее, последовательно и продуманно защищает свое мнение, привлекая симпатии многих разработчиков, особенно когда занимается критикой. Часто при этом точка зрения Дейта оказывается шире реляционности, и применима к теории баз данных вообще.

В сравнении с некоторыми современными авторами, выпускающими по нескольку книг в год, Дейт неплодовит, однако каждое его публичное выступление, письменное или устное, привлекает повышенное внимание специалистов.

Книга

Книга состоит из шести частей:

Читатель, знакомый с советским переводом заметит, что в шестом издании исчезли части, посвященные не-реляционным моделям данных (иерархической и сетевой) и сравнению моделей, но зато добавились отдельные части по объектному подходу и по проектированию БД. Остальные части книги подверглись перегруппировке и существенной переработке. Шестое издание, как замечает сам автор, это «новая книга» по отношению к изданию 1975-го года.

Часть «Основные понятия» в своих главных, «задающих тон» главах по существу осталась прежней. В ней последовательно рассматриваются три темы: управление базами данных (что такое база данных и система управления базами данных); архитектура системы баз данных; введение в реляционные базы данных. Здесь очень важен порядок изложения, оно идет от общего к частному, и существенно, что понятие реляционной БД замыкает эту часть книги, а не открывает ее рассуждением, к примеру, о том, как ловко можно создавать и изменять таблички. Реляционные системы здесь выглядят не неким самодостаточным явлением, обязанным счастливому изобретению, а выражением идей и подходов, сформировавшихся примерно в течение десятилетия, берущего начало во второй половине 60-х. Это важно по двум причинам: во-первых, в отвлеченном формальном изложении реляционного подхода, с которым нередко имеют дело практикующие программисты (еще не худший вариант !) исчезает смысл и мотивировка понятий, составляющих методологическую основу применения подхода. Программист, осознающий используемую реляционную систему шире, нежели как систему для работы с табличками, и знакомый с такими принципами, как централизованный подход к управлению данными, разделение данных и прикладных программ, трехуровневая архитектура системы баз данных (внешний уровень, концептуальный и внутренний), и другими, предшествующими в этой части книги изложению реляционного подхода, скорее всего будет применять свою СУБД более адекватно. Ну а во-вторых, автор правильно расставляет акценты, указывая расположением материала, что реляционный подход -- это только одно из воплощений более общих идей, оставляя, по крайней мере теоретически, свободу творчества желающим того.

Вторая часть, в которой излагаются понятия реляционной модели, очень конкретна и формальна. Это -- «конек» Дейта, в котором он почти никем в мире не превзойденный специалист. Здесь «поставщики», «детали» и «города» базы данных -- наглядного пособия Дейта в книге -- служат для объяснения таких фундаментальных для реляционной модели понятий, как домены, отношения, целостность объектов и ссылок. Здесь говорится о реляционных операторах (в контексте реляционной алгебры и реляционного исчисления) и о языке SQL, ставшим de facto как бы принадлежностью реляционного подхода. Теоретичность этой части может отпугнуть закоренелого «практика», разве что кроме как от главы про SQL. Тем не менее, это очень важная часть книги (а для людей, менее закоснелых -- еще и очень увлекательная). Мне, например, не раз приходилось сталкиваться с программистами, тратящими впустую свое (а значит, не только свое) время на поиск SQL-выражения для принципиально не формулируемого в этом языке запроса. А что может быть практичнее программистского времени ? О теоретичности следует сказать и несколько слов отдельно. Дело в том, что в этой части книги речь идет, строго говоря, о нереализованных вещах. Это относится и к реляционной модели (Дейт, употребляя выражение «реляционная система» для некоторых существующих СУБД, сам, в то же время, не может не оговориться, что СУБД, реализовавших реляционную модель в полной мере, не создано никем), и к SQL (в книге речь идет о «стандарте» SQL-2, по поводу которого можно сказать, что, во-первых, он в полном объеме также нигде не реализован, и, во-вторых, что даже в тех системах, где реализован начальный уровень SQL-2, он везде реализован в виде подмножества какого-то специфичного диалекта SQL, и, таким образом, слово «стандарт» применительно к SQL-2 становится относительным). И все-таки, теоретичность рассматриваемого автором предмета не есть теоретизирование, поскольку речь идет о максимально приближенных к конкретным реализациям общих вещах, либо же о непосредственных направлениях развития (возможно, правда, желаемым). Трудно представить себе организацию или программиста, по гробовую доску связавших себя исключительно с одной версией одной конкретной СУБД, а раз так, то общность модели данных и языка работы с данными, предлагаемая Дейтом, прекрасно служит, опять-таки, методологической основой проектирования БД. Наконец, это самая объемная часть книги (сам автор называет ее «книгой в книге»), полностью построенная на примерах, и по характеру текста трудно не заключить, что автор испытывал особое удовольствие, создавая ее.

В части «Проектирование баз данных» речь идет о логическом проектировании БД, иначе говоря о том, как для имеющегося в прикладной области набора данных выбрать подходящую логическую структуру и решить, какие следует задать базовые отношения и с какими атрибутами. Физическое проектирование (проектирование схемы конкретной СУБД) в книге не затрагивается, что, конечно, не противоречит общей позиции рассматривать максимально приближенные к конкретным, но все еще общие решения (см. выше)). Дейт замечает, что логическое проектирование -- более искусство, чем наука, а также упоминает о существующем в реальной практике обратном влиянии физической модели данных на логическую. И все же, определенная наука в логическом проектировании имеется, и она необходима. Можно, например, заметить, что SQL-запрос к ненормализованной БД не обязан давать содержательно правильный ответ (синтаксически этот запрос может быть вполне корректен). Итак, предметами рассмотрения этой части являются две вещи: нормализация (в контексте функциональной зависимости) и проектирование «сущность/связь». Если второе многим отечественным разработчикам знакомо по CASE-системам, которыми они пользуются в повседневной практике (что, конечно, не может служить основанием для того, чтобы не читать соответствующую чрезвычайно полезную главу у Дейта), то о функциональных зависимостях следует упомянуть отдельно. Причина -- то, что в реальной жизни многие разработчики эту возможность проектирования себе просто не представляют, разве что руководствуясь иногда простым житейским правилом, что «атрибуты в таблице не должны зависеть друг от друга, кроме как от ключа». Между тем, как пишет Дейт, понятие функциональных зависимостей «обеспечивает основу для научного подхода к решению нескольких практических задач, поскольку обладает богатым набором интересных формальных свойств, позволяющих формально и строго решить многие проблемы». Можно надеяться, что из книги читатель вспомнит, или откроет для себя впервые, что такое та или иная нормальная форма, и как знание это применительно к своему конкретному приложению способно помочь спроектировать БД. Также можно заметить, что опять-таки, хотя изложение в этой части книги ведется применительно к реляционной системе, оно применимо и к другим моделям данных.

В четвертой части автор от модельных качеств СУБД возвращается к эксплуатационным, относящимся к средствам защиты множества данных в БД от преднамеренных или случайных угрожающих ситуаций в условиях одновременной работы с базой многих пользователей. Речь здесь идет о таких функциях СУБД, как восстановление, параллелизм, защита и целостность. Обсуждается очень широкий круг вопросов, включающих схемы организации и механизмы выполнения транзакций (некоторым программистам, полагающим, что «система сама разберется как обработать запросы правильно», не мешало бы, например, увидеть на примере, как при обработке «правильно» составленных транзакций возникают ситуации, которые могут привести к получению неправильного результата), методы блокировки, избирательное и обязательное управление доступом, шифрование, декларативные ограничения целостности (сохранение корректности данных), ограничения состояния и перехода и др. Для меня здесь маленьким открытием стало как Дейт «справился» с «противоречием» понятия избыточности данных в СУБД: на первых же страницах книги он объявляет о том, что одна из целей СУБД состоит в устранении избыточности данных, а в то же время известно, что единственным способом обеспечить восстановление данных (а это функция СУБД) является обеспечение в той или иной форме избыточности. Оказывается все просто: устраняется избыточность на логическом уровне, а организуется -- на физическом.

В число «дополнительных аспектов» в пятой части книги попали некоторые концепции и возможности, которые, по мнению Дейта, должны быть употребимы разработчиками при использовании реляционной технологии, изложенной в предшествующих частях (главным образом во второй части). Можно заметить, что другие специалисты включают некоторые из этих «аспектов» в саму реляционную технологию. Но так или иначе, автор здесь говорит о следующих вещах: о представлениях (view); об оптимизации (составляющей, по выражению Дейта, для реляционных систем как проблему, так и возможность повышения производительности); о комплексе вопросов, связанных с доменами, отношениями и типами данных; о работе с отсутствующей информацией; о распределенной БД и об архитектуре клиент/сервер.

Наконец, в последней части книги Дейт предлагает свое видение в общих чертах «объектно-ориентированного» (объектного) подхода в применении к базам данных, а также дает критический анализ основных концепций объектных баз данных, и сравнительную характеристику объектной и реляционной технологий в области баз данных. Дейт сразу отмечает, что «в отличие от реляционной технологии здесь [в объектной] не существует общепринятой, абстрактной и формально определенной -объектной модели данных-», и что словосочетание «объектно-ориентированный» скорее просто является «удобным ярлыком для целой совокупности некоторых взаимосвязанных идей». Тем не менее, он как математик (или, по крайней мере, формалист) пытается по инерции, набранной в своих реляционных исследованиях, честно изучить эти «объектные идеи» и высказывает при этом продуманные соображения, хотя и не всегда совпадающие с мнением других специалистов.

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

Изложение

По поводу изложения хотелось бы высказать два разнохарактерных наблюдения. Во-первых, как было сказано, Дейт, хотя и классик, но отнюдь не всегда конформист в отношении более распространенных, или же не менее авторитетных точек зрения. Его взгляды по отдельным вопросам могут расходиться с такими специалистами, как Кодд (например, точка зрения на отсутствующие значения) и Стоунбрейкер (объектно-реляционный подход). И тем не менее, в книге эти расхождения не выливаются в своего рода «фундаментализм». У Дейта присутствует терпимый, можно даже сказать (зная о наличии теоретических расхождений) деликатный подход к изложению материала. Если он понимает, что точка зрения, которую он не разделяет, является доминирующей, или поддерживается нелегковесными аргументами, то он всегда ее излагает. Известно, что он давний противник имеющейся реализации SQL как языка работы с реляционными СУБД, но целая глава отведена SQL-2; и так далее. Деликатность состоит в том, что часто, изложив чужую точку зрения на материал, он отсылает за своей в список рекомендуемой литературы !

Второе наблюдение касается педагогического характера книги. Книга написана в стиле учебника, хотя отдельные места по своему уровню рассчитаны на обучение не студентов, а работающих специалистов. Помимо продуманного последовательного расположения материала, почти каждая глава (каждая относящаяся к реляционной технологии) сопровождается упражнениями и каждая -- аннотированным списком литературы. Это очень замечательные списки литературы, существенно обогащающие книгу контекстом исторического плана и плана более глубокой или специализированной разработки обозначенных тем. Упражнения, естественно, дают возможность читателю лучше усвоить материал книги, а хорошо аннотированная литература -- продолжить изучение вопроса глубже, или же понять историческую мотивацию.

Перевод

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

Книга переведена внятным и ясным русским языком. Впечатления, что читаешь перевод у меня почти не возникало. Отчасти это обязано, вероятно, хорошему языку самого Дейта, но тогда заслуга переводчиков в том, что они это качество сохранили. Слово «почти» в предпоследнем предложении употреблено не в связи с языком перевода, а в связи с терминологией, о чем ниже.

Особенность русского языка в том, что почти вся компьютерная терминология в нем взаимствована1. Удачность и систематизация русских переводов американских терминов всегда была некоторой проблемой, особенно обострившейся в последние годы. Мне показалось, что переводчики книги Дейта справились с этим обострением достаточно своеобразно: многие термины переведены «на свой лад», не «заглядывая в святцы». В некоторых случаях найденные ими решения действительно могли бы показаться справедливым смертным приговором какому-нибудь неудачно употреблявшемуся переводу (или даже грозди переводов, если отсутствовал один-единственный). Но некоторые другие решения переводчиков могут показаться спорными. Все-таки Entity/Relationship лучше бы по-прежнему именовать «сущность/связь», а не «объект/свойство», как это сделано в книге, даже если определенная близость Entity «объекту» не оставляет сомнений (однакоже и близость, а не совпадение). Из более специфичных терминов можно привести в пример следующие две четверки: в книге, там, где речь идет об известной статье Кодда «Расширение реляционной модели для лучшего отражения семантики» (ACM TODS, 4/4, 1979), говорится о категориях объектов, таких как «ядра, характеристики и соединения»; в переводе же этой статьи, выполненым М. Р. Когаловским ранее перевода книги (см. СУБД ¦5-6, 1996) говорится о «стержневых, характеристических и ассоциативных» сущностях. И так далее. Мне близка оценка терминологического ряда переводных компьютерных терминов, сложившегося в русском языке, как неудовлетворительная в целом, но, во-первых, она не распространяется на все используемые переводы, и, во-вторых, есть испытанный метод смягчения последствий такого рода разброда. Он заключается в приведении оригинального термина рядом с переведенным, что сделать, право, ничего не стоит.

Заключение

Обстоятельства последнего десятилетия были таковы, что состояние с подготовкой разработчиков ПО вообще и БД в частности у нас сейчас критическое. По сути дела, мы имеем целое потерянное поколение молодых специалистов, не получивших должного вузовского образования по базам данных, а осваивавших эту специальность в рабочих коллективах по документации конкретных СУБД или даже файловых систем (см. первую главу книги Дейта). Нынешнее поколение студентов тоже в незавидном положении: и то сказать, в центральном и крупнейшем вузе страны, МГУ, есть всего один курс по базам данных, читаемый Сергеем Дмитриевичем Кузнецовым, низкий поклон ему за это ! В отличие от западных сверстников, изучающих общие принципы баз данных в институте, и затем осваивающих конкретные системы по месту работы, наши студенты вынуждены сразу «писать скрипты», подбирать параметры, рисовать схемы таблиц БД и т.д., то есть начинают работать с частностями, имея немного понятия об общем. В результате зачастую неважно даже, с какого типа системой работает молодой специалист: с реляционной, объектной или реляционно-объектной, с системой X, Y или Z -- в любом случае его схема БД получается составленной неквалифицированно; человек просто не знает, «как можно», «как нужно» и «как бывает».

В этих условиях значение книги издательства «Диалектика» переоценить трудно. Она дает студенту, или начинающему специалисту хороший шанс восполнить общеобразовательный пробел на очень доброкачественном уровне, пусть хотя бы и самостоятельно. Нужно только набраться мудрости и энергии (чтение книги требует работы, а не компьютера !) не упустить этот шанс.

Суммируя, можно сказать, что несмотря на видимое обилие компьютерной литературы на книжных прилавках (никого не хочу обидеть), книг такого уровня у нас давно не выпускалось. Кажется вполне уместным вспомнить слова другого автора, сказанные по поводу другого издания: «Очень нужная и своевременная книга !».


(1) Трудно не удержаться и не заметить пессимистам, что примером не привезенного из-за рубежа компьютерного термина самого последнего времени является геморрой.