Новое издание фундаментального труда Криса Дейта - одного из наиболее уважаемых во всем мире экспертов и мыслителей в области технологии баз данных - несомненно, вызовет интерес у программистов-профессионалов, научных работников и студентов, изучающих соответствующие курсы в высших учебных заведениях. Эта книга содержит исчерпывающее изложение как классических идей в области реляционной теории, так и развернутое обсуждение наиболее современных практических решен
ий и технологий в области проектирования, реализации и сопровождения баз данных. Несмотря на исключительную глубину рассмотрения предмета, материал излагается простым и ясным языком и сопровождается большим количеством практических примеров. Книга, безусловно, будет полезна всем, кому приходится иметь дело с базами данных или кто просто интересуется данной темой.
Эта книга посвящается моей жене Линди
и памяти моей матери Рине
Об авторе
К.Дж. Дейт (C.J. Date) - независимый публицист, лектор, ученый и консультант, специализирующийся на технологии реляционных баз данных. Он живет в Хилдсбурге, штат Калифорния.
Начиная с 1967 года Дейт несколько лет работал математиком-программистом и инструктором по программированию в компании Leo Computers Ltd. (Лондон, Великобритания). После этого он работал в лаборатории IBM (UK) Development Laboratories над интеграцией функций баз данных в язык PL/1. В 1974 году он перешел в калифорнийский центр IBM Systems Development Center, где отвечал за разработку языка баз данных, известного в настоящее время как Unified Database Language (UDL). Впоследствии принимал учас
тие в техническом планировании и внешних проектах корпорации IBM для продуктов реляционных баз данных SQL/DS и DB2. В мае 1983 года он покинул компанию IBM.
Дейт работает в области баз данных почти 30 лет. Одним из первых он осознал основополагающее значение новаторской работы Э.Ф. Кодда (E.F. Codd) по реляционной модели. Дейт читал лекции по техническим вопросам (преимущественно по тематике баз данных и, в частности, по реляционным базам данных) во всей Северной Америке, а также в Европе, Австралии, Латинской Америке и на Дальнем Востоке. Он является автором или соавтором не только этой, но и других книг по базам данных: Foundation for Object/Rela
tional Databases: The Third Manifesto (1998), в которой даны развернутые предложения по развитию данной области; Database: A Primer (1983), в которой базы данных рассматриваются с точки зрения неспециалиста; серии книг Relational Database Writings (1986, 1990, 1992, 1995 и 1998 годы), в которых фундаментально изложены различные вопросы реляционной технологии; а также другой серии книг, посвященной отдельным системам и языкам (A Guide to DB2 (4th edition, 1993)
, A Guide to SYBASE and SQL Server (1992), A Guide to SQL/DS (1988), A Guide to INGRES (1987) и A Guide to the SQL Standard (4th edition, 1997)). Книги Дейта переведены на многие языки, в том числе на греческий, датский, испанский, итальянский, китайский, корейский, немецкий, польский, португальский, русский, французский и японский. Кроме того, его книги изданы с использованием шрифта Брайля для слепых.
Дейт опубликовал более 300 технических статей и научных работ и внес значительный вклад в теорию баз данных. Его работы постоянно публикуются в журналах Database Programming & Design и Intelligent Enterprise. Профессиональные семинары по технологии баз данных, проводимые им как в Северной Америке, так и за рубежом, признаны непревзойденными по качеству представленного материала и ясности изложения.
Дейт с отличием закончил Кембриджский университет в Великобритании (1962√1966) и получил диплом математика, а затем ученую степень доктора технических наук в де Монфортском университете в Великобритании (1994).
Предисловие к седьмому изданию
Настоящая книга представляет собой исчерпывающее введение в очень широкую в настоящее время область теории баз данных. С ее помощью читатель сможет приобрести фундаментальные знания в области технологии баз данных, а также ознакомиться с направлениями, по которым эта область, вероятно, будет развиваться в будущем. Книга задумывалась как учебник, а не как справочник, но я надеюсь, что ее в какой-то мере можно будет использовать и в качестве справочного руководства. В книге делается акцент на усвоении су
щности и глубоком понимании излагаемого материала, а не просто на его формальном изложении.
Для кого предназначена эта книга
В целом, книга ориентирована на читателей, которые профессионально работают с компьютерами в той или иной области и хотят получить общее представление о теории и практическом использовании баз данных. Предполагается, что читатель имеет по крайней мере базовые знания в следующих областях:
средства управления памятью и файлами (индексация и т.д.) в современных компьютерных системах;
хотя бы один из языков программирования высокого уровня (например, C, Java, Pascal, PL/I и т.д.).
Структура книги
Книга разделена на шесть частей.
Основные понятия.
Реляционная модель.
Проектирование базы данных.
Управление транзакциями.
Дополнительные аспекты.
Объектные и объектно-реляционные базы данных.
Каждая часть, в свою очередь, делится на несколько глав.
Часть I (четыре главы) - это обширное введение в теорию баз данных вообще и реляционных баз данных в частности. Здесь также излагаются основы стандартного языка баз данных SQL.
Часть II (пять глав) содержит детальное и весьма основательное описание реляционной модели, которая является теоретической основой не только для собственно реляционных систем, но фактически для всей технологии баз данных.
Часть III (четыре главы) включает обсуждение общих аспектов проектирования баз данных. Три главы посвящены теории проектирования, а в четвертой рассматривается семантическое моделирование и модель "сущность/связь".
Часть IV (две главы) посвящена управлению транзакциями (т.е. обеспечению процедур восстановления и поддержки параллельного доступа).
Часть V (восемь глав) - это некоторое "попурри". Основное его назначение состоит в описании применения реляционных понятий к различным аспектам технологии баз данных, включая защиту данных, распределенные базы данных, хронологические наборы данных, системы поддержки принятия решений и т.д.
Часть VI (две главы) содержит обсуждение объектной технологии и ее применения в свете концепций баз данных. В последней главе книги, в частности, рассматривается возможность сближения между объектной и реляционной технологиями и обсуждаются принципы построения объектно-реляционных систем.
Кроме того, в книге есть три приложения. В приложении А рассматриваются дополнительные возможности языка SQL, в приложении Б можно ознакомиться с концепциями стандарта SQL3 (новой версии стандарта языка SQL, которая, по-видимому, уже будет утверждена как стандарт, когда эта книга выйдет в свет) и в приложении В перечислены некоторые важные сокращения и аббревиатуры.
Замечание. Существует интерактивное руководство Instructor▓s Manual, в котором даны указания о том, как использовать эту книгу с целью преподавания учебного курса, посвященного базам данных. В руководстве содержится множество замечаний, советов и предложений по каждой главе и ее приложению, а также ответы к тем упражнениям, к которым нет ответов в книге. Читатель найдет в нем и другие материалы, которые окажут ему существенную помощь. Как получить доступ к этому руководству, можно узнать
в местном торговом представительстве издательства Addison-Wesley. Чтобы установить местонахождение ближайшего представительства этого издательства, обращайтесь на его Web-сайт по адресу http://hepg.awl.com/rep-locator.
Как читать эту книгу
В целом, книга рассчитана на последовательное чтение, но можно пропустить последние главы и последние разделы внутри глав по своему усмотрению. Вот предлагаемый план чтения.
Бегло прочитайте главы 1 и 2.
Очень внимательно изучите главы 3 и 4.
Внимательно прочитайте главы 5, 6, 8 и 9, но пропустите главу 7 (за исключением, может быть, раздела 7.7).
Бегло прочитайте главу 10.
Внимательно прочитайте главы 11 и 13, но пропустите главу 12.
Внимательно прочитайте главы 14 и 15.
Выборочно по своему желанию и интересам прочитайте последующие главы.
Каждая глава начинается введением и заканчивается заключением (резюме). Кроме того, в большинство глав включены упражнения, обычно с ответами. Рекомендуется просматривать ответы к упражнениям, так как в них часто содержится дополнительная полезная информация по теме конкретной главы. Также в большинстве глав вы найдете обширные списки литературы, которые обычно дополнены комментариями. Такая структура книги позволяет усваивать материал на нескольких уровнях: наиболее важные понятия и результаты приведе
ны в основном тексте, а дополнительные вопросы и более сложные аспекты исследования вынесены в соответствующие упражнения, ответы к ним и комментарии к литературе.
Замечание. Ссылки обозначаются в тексте двойным номером в квадратных скобках. Например, ссылка [3.1] означает первый пункт в списке литературы к главе 3, а именно - статью Э.Ф. Кодда, опубликованную в журнале CACM, Vol. 25, No. 2 в феврале 1982 года. (Объяснение сокращений, которые используются в ссылках, например, "CACM", можно найти в приложении В.)
Сравнение с предыдущими изданиями
Ниже перечислены главные отличия настоящего издания от предшествующих.
Часть I. В главах 1√3 обсуждается примерно та же тема, что и в главах 1√3 предыдущего издания, но главы были переписаны и изложение нескольких тем было переработано и улучшено. Глава 4 новая, хотя можно сказать, что частично она основана на материале главы 8 предыдущего издания. В ней рассматриваются основы языка SQL и его отдельные аспекты, которые логически не связаны ни с какими другими главами в этой книге (в частности, привязка к базовому языку и использование внедренны
х SQL-операторов).
Часть II. Главы 5√9, посвященные реляционной модели, представляют собой полностью переписанные, значительно расширенные и существенно улучшенные версии глав 4√7 и 17 предыдущего издания. В частности, коренным образом переработаны разделы о типах (доменах), реляционных значениях и реляционных переменных, ограничениях целостности, предикатах и представлениях.
Замечание. Здесь необходимо дать некоторые пояснения. В предыдущих изданиях язык SQL использовался для демонстрации реляционных понятий в надежде на то, что студентам будет легче сначала разобраться в конкретных примерах, а затем перейти к теории. Однако, к сожалению, в настоящее время пропасть между языком SQL и реляционной моделью настолько увеличилась, что стало очевидно следующее: использовать язык SQL с этой целью - значит, по сути, просто вводить читателей в заблуждение. В действительности
язык SQL в его современном виде настолько далек от того, чтобы быть олицетворением реляционных принципов (он страдает от множества недоделок и переделок), что я предпочел перенести его описание в приложение. Однако язык этот настолько важен с коммерческой точки зрения (каждый специалист, работающий с базами данных, обязательно должен быть знаком с языком SQL), что обойтись с ним так бесцеремонно было бы недопустимо. Поэтому я остановился на компромиссе - глава по основам языка SQL помещена в часть I этой
книги, а в другие главы (где это уместно) вставлены отдельные дополнительные разделы, содержащие описание тех аспектов языка SQL, которые связаны с темой соответствующей главы.
Часть III. Главы 10√13 - это существенно переработанные версии глав 9√12, дополненные новым материалом по реляционно-значимым атрибутам, денормализации, ортогональному проектированию и альтернативным подходам к семантическому моделированию (включая бизнес-правила).
Замечание. И снова необходимы пояснения. Некоторые рецензенты предыдущих изданий жаловались, что вопросы проектирования базы данных излагались слишком поздно. Но, по моему мнению, студенты будут не вполне готовы к проектированию баз данных или не смогут правильно оценить результаты проектирования до тех пор, пока не поймут, что собой представляют базы данных и как они используются. Другими словами, мне кажется, что следует предварительно потратить некоторое время на реляционную модель и связанны
е с ней вопросы и лишь затем приступить к изучению методов проектирования. Поэтому я по-прежнему убежден, что часть III расположена в книге правильно.
Часть IV. Две главы данной части - это несколько пересмотренные и расширенные версии глав 13 и 14 предыдущего издания.
Часть V. Главы 19 (о наследовании типов), 21 (о поддержке решений) и 22 (о хронологических базах данных) новые. Главы 16 (о безопасности), 17 (об оптимизации), 18 (об отсутствующей информации) и 20 (о распределенных базах данных) представляют собой расширенные и существенно пересмотренные версии глав 15, 18, 20 и 21 предыдущего издания соответственно. Глава 23 (о логических и дедуктивных базах данных) - это переработанная версия прилож
ения Б.
Часть VI. Глава 24 является полностью переписанной и значительно улучшенной версией глав 22√24. Глава 25 почти полностью обновлена.
И наконец, приложение А основано на части главы 8 предыдущего издания, а приложения Б и В являются новыми.
Из этого издания исключены следующие темы.
Структуры хранения и методы доступа (приложение А предыдущего издания).
Подробное обсуждение системы DB2 (приложение Б предыдущего издания).
Особенности этой книги
Каждая представленная на рынке книга по базам данных имеет свои сильные и слабые стороны, и каждый автор имеет своего "конька". Один автор уделяет особое внимание вопросам управления транзакциями, а другой делает акцент на построении моделей типа "сущность-связь". Один автор смотрит на все через призму языка SQL, а другой рассматривает все с чисто объектной точки зрения. Многие авторы обсуждают все, что касается баз данных, исключительно в терминах коммерческих продуктов, и т.д. И, конечно, я - не искл
ючение из этого правила: я также имею своего "конька", который может называться основами. Я твердо верю, что мы в любом случае должны ясно усвоить основы и обстоятельно в них разобраться, прежде чем пытаться что-либо на этих основах строить. Такое убеждение объясняет столь сильный акцент, сделанный в данной книге на реляционной модели. В частности, это объясняет и размеры второй части (наиболее важной части книги), в которой я представляю собственное понимание реляционной модели настолько тщательно
, насколько это в моих силах. Меня интересуют основы, а не причуды и мода.
В этой связи необходимо отметить следующее: я удовлетворен тем, что на протяжении многих лет общий характер книги изменялся. Несколько первых изданий были, в основном, описательными по характеру; в них область баз данных описывалась так, как это действительно имело место на практике, "без прикрас". В отличие от предыдущих изданий, это издание - более предписывающее; в нем обсуждается состояние, в котором область баз данных должна находиться, и направления, по которым она должна развиватьс
я в будущем, если мы будем поступать разумно (иными словами, эта книга выражает определенную позицию). И первая часть "разумных действий", несомненно, заключается в изучении этих разумных действий. Я надеюсь, что настоящее издание может оказать существенную помощь в достижении подобной образовательной цели.
И еще одно, связанное с предыдущими рассуждениями, замечание. Некоторые читатели, возможно, знают, что я со своим коллегой Хью Дарвеном (Hugh Darwen) недавно опубликовал другую "предписывающую" книгу по технологии баз данных, которая называется The Third Manifesto [3.3]. В ней, исходя из реляционной модели, обстоятельно излагаются технические предложения относительно будущих систем баз данных (представленные здесь предложения - результат наших с Хью исследований и размышлений по этой тематике).
Поэтому неудивительно, что идеи Manifesto наполняют читаемую вами книгу. Многие подумают, что книга Manifesto была необходима для создания данной книги, однако это не так. В то же время вопросы, рассматриваемые в книге Manifesto, имеют непосредственное отношение почти ко всем темам, которые обсуждается в данной книге, и часто в книге Manifesto можно найти дополнительную информацию по многим затрагиваемым здесь темам.
Заключительное замечание
Свои вступительные замечания мне хотелось бы закончить следующей отредактированной выдержкой из предисловия Бертрана Расселла (Bertrand Russell), приводимой здесь с любезного разрешения автора, к его словарю The Bertrand Russell Dictionary of Mind, Matter and Morals (ed. Lester E. Denonn; Citadel Press, 1993).
Меня обвинили в привычке менять свои суждения... Но я нисколько не пристыжен этой привычкой. Разве мог бы физик, работающий с 1900 года, гордиться тем, что его суждения не изменились за последние полстолетия?... Философия, которую я ценю и которой стараюсь следовать, научна в том смысле, что существуют точные знания, которые необходимо получить, а новые открытия могут выявить старые ошибки, неизбежные для любого беспристрастного разума. Когда бы и что бы я ни говорил, я не претендую на полную истину
так, как на нее претендуют теологи в своем учении. Я претендую только на то, что тогда было благоразумно придерживаться высказанного мнения... Я был бы очень удивлен, если бы дальнейшие исследования не показали, что его необходимо менять. Прежде всего, моей целью была ясность.
Если читатели предыдущего издания будут изучать настоящее, они обнаружат, что я тоже меняю свои мнения по некоторым вопросам (и, несомненно, буду продолжать это делать). Я надеюсь, что высказанное выше замечание они сочтут достаточным оправданием такого положения дел. Я разделяю понимание Бертраном Расселом того, что собой представляет научное исследование, но он высказал его гораздо красноречивее, чем я мог надеяться сделать это сам.
Благодарности
Хочу исполнить приятный долг и поблагодарить всех, кто прямо или косвенно принимал участие в работе над этой книгой. Во-первых, я должен поблагодарить моих друзей Дэвида Мак-Говерна (David McGoveran) и Хью Дарвена (Hugh Darwen) за их огромную поддержку. Дэвид написал черновик главы 21 (о системах поддержки принятия решений), а Хью - черновик главы 22 (о хронологических базах данных). Хью также очень тщательно просмотрел большие фрагменты рукописи, в том числе все главы о реляционной модели и
приложение по языку SQL3. Во-вторых, текст книги был заметно улучшен благодаря замечаниям слушателей семинаров, которые я веду уже на протяжении семи лет. Кроме того, положительное влияние на ее текст оказали комментарии многих друзей и рецензентов, а также мои дискуссии с ними. Вот далеко неполный их список: Чарли Бонтемпо (Charley Bontempo), Дэклан Брэди (Declan Brady), Хью Дарвен (Hugh Darwen) (опять), Тим Хартли (Tim Hartley), Эдриан Ларнер (Adrian Larner), Чунг Ли (Chung Lee), Дэвид Ливингстон (David
Livingstone), Никос Лоренцос (Nicos Lorentzos), Хуижа Лу (Huizha Lu), Рамон Мата-Толедо (Ramon Mata-Toledo), Нельсон Маттос (Nelson Mattos), Дэвид Мак-Говерн (David McGoveran) (опять), Фабиан Паскаль (Fabian Pascal), Судха Рам (Cudha Ram), Рик ван дер Ланс (Rick van der Lans), Йонгдонг Ванг (Yongdong Wang), Колин Вайт (Colin White) и Квианг Жу (Qiang Zhu). Каждый из них просмотрел по крайней мере часть рукописи этого издания, предоставил технический материал или как-то иначе помог мне найти ответы на мно
гие технические вопросы. Я весьма признателен им за это. Также хотелось бы снова поблагодарить мою жену Линди (Lindy) за помощь в оформлении книги. И наконец, я, как всегда, благодарен всем в издательстве Addison-Wesley, особенно - Майт Суарез-Ривас (Maite Suarez-Rivas) и Кэтрин Харутуниан (Katherine Harutunian) за их поощрение и поддержку во время работы над проектом, а также моему редактору Элидии Дэвис (Elydia Davis) за ее безукоризненную работу.