|
Программирование >> Хронологические базы данных
Глава 4 Введение в язык SQL 4.1. Введение Как отмечалось в главе 1, SQL является стандартным языком для работы с реляционными базами данных и в настоящее время поддерживается практически всеми продуктами, представленными на рынке. Он был разработан в компании IBM Research в начале 1970-х годов [4.8], [4.9], [4.28]. Первой серьезной реализацией этого языка был продукт-прототип System R компании IBM [4.1]-[4.3], [4.11]-[4.13]; впоследствии он был реализован в многочисленных коммерческих продуктах как компании IBM [4.20], так и других изготовителей. В этой главе представлено введение в язык SQL, а дополнительные аспекты, касающиеся таких вопросов, как целостность, защита и т.п., обсуждаются в последующих главах, специально посвященных этим темам. При обсуждении языка мы будем основываться (если не утверждается противное) на текущем стандарте, неформально называемом SQL/92 (иначе - SQL-92 или просто SQL2 [4.22], [4.23]). Его официальное название- Международный стандарт языка баз данных SQL (1992) (International Standard Database Language SQL). Замечание. Необходимо сразу же добавить, что разработка следующего нового стандарта SQL3 близится к завершению и его утверждение ожидается в конце 1999 года. К этому времени данная книга уже появится в продаже и текущий стандарт, возможно, будет называться SQL/99, а не SQL/92. Однако мы сочли, что, если при обсуждении языка основываться на еще не утвержденном стандарте SQL3, это может привести к недоразумениям, поскольку совершенно очевидно, что ни один продукт еще не поддерживает данный стандарт. Поэтому мы решили рассмотреть стандарт SQL3 отдельно, в приложении Б. Во всяком случае, и это необходимо отметить, ни один из коммерческих продуктов к моменту написания книги не поддерживал в полной мере даже стандарт SQL/92. Те языки, которые обычно поддерживаются отдельными продуктами, можно назвать надмножествами подмножества языка SQL/92. Другими словами, любой продукт, не поддерживающий некоторых аспектов стандарта, в других отношениях, возможно, превосходит его. Например, СУБД IBM DB2, безусловно, не поддерживает всех функциональных возможностей, предусмотренных стандартом SQL/92 в отношении обеспечения целостности данных, тем не менее она превосходит стандарт в отношении правил, связанных с обновлением представлений. И еще несколько предварительных замечаний. Язык SQL первоначально разрабатывался конкретно как подъязык данных. Однако после включения в стандарт в конце 1996 года такого средства, как постоянные хранимые .модули (Persistent Stored Modules - PSM), язык стал полностью вычис- На самом деле ни один из продуктов, по-видимому, и не смог бы поддерживать в полной мере стандарт SQL/92, поскольку в этом стандарте на сегодняшний день содержится множество расхождений, ошибок и противоречий. Подробно этот вопрос рассматривается в [4.19]. лительным (и сейчас в нем имеются процедурные операторы, например CALL, RETURN, SET, CASE, IF, LOOP, LEAVE, WHILE, REPEAT, a также несколько связанных с ними функциональных возможностей, например можно использовать переменные и обработчики исключительных ситуаций). Поэтому во многих случаях отпала необходимость в объединении SQL с каким-то отдельным основным языком для разработки полнофункционального приложения. Однако в этой книге возможности PSM рассматриваться не будут. Вас не должно удивлять, что в языке SQL вместо терминов отношение и переменная-отношение используется термин таблица (см. главу 3). Именно этот термин используется стандартом языка SQL и поддерживающими его продуктами, поэтому в соответствии с ними мы будем использовать указанный термин в данной главе (и везде, где пойдет речь о языке SQL). Кроме того, в языке SQL не употребляются термины заголовок и тело (таблицы или отношения). Необходимо подчеркнуть, что SQL - язык очень большого объема. Документ по его стандарту [4.22] содержит свыше 600 страниц (а описание стандарта SQL3 - в два раза больше). Поэтому в книге, подобной этой, невозможно дать исчерпывающее описание языка. Достаточно полно мы сможем рассмотреть лишь самые важные его аспекты. Хотелось бы предупредить читателя, что приведенное здесь описание языка во многих случаях беглое и поверхностное. В частности, мы, не колеблясь, опустили материал, не относящийся непосредственно к обсуждаемой теме, и для краткости сделали существенные упрощения. Более полное (но также учебное) описание языка SQL можно найти в [4.4], [4.19] и [4.27]. И наконец, нельзя не сказать о том (как уже неоднократно отмечалось в предыдущих главах), что языку SQL еще очень далеко до совершенного реляционного языка. В нем много недостатков, появившихся в результате как недоделок, так и переделок. Однако как бы там ни было, это - стандарт, он поддерживается практически всеми продуктами, представленными на рынке, и поэтому каждый специалист по базам данных должен быть знаком с этим языком, по крайней мере в том объеме, который охватывает эта книга. 4.2. Обзор языка SQL в языке SQL имеются операции как определения данных, так и манипулирования ими. Сначала мы познакомимся с операциями определения данных. На рис. 4.1 показано, как с помощью средств языка SQL определяется база данных поставщиков и деталей (ср. с рис. 3.9 в главе 3). Как можно видеть, определение включает один оператор CREATE TABLE для каждой базовой таблицы (как указывалось в главе 3, ключевое слово TABLE в операторе CREATE TABLE обозначает именно базовую таблицу). Каждый оператор CREATE TABLE задает имя создаваемой базовой таблицы, имена и типы данных столбцов этой таблицы, а также первичный ключ таблицы и любые внешние ключи, присутствующие в ней (кроме того, может быть указана другая дополнительная информация, которая не показана на рис. 4.1). Приведем еще пару замечаний по синтаксису. Обратите внимание, что символ # , который мы часто используем в именах столбцов, на самом деле в стандарте SQL/92 недопустим. в качестве признака конца оператора мы здесь используем символ хотя согласно стандарту SQL/92 выбор используемого для этой цели символа зависит от реализации. Детальное рассмотрение данного вопроса выходит за рамки этой книги. CREATE TABLE S SI CHAR(5), SNAME CHAR(20), STATUS NUMERIC(5), CITY CHAR(15), PRIMARY KEY ( SI ) ) ; CREATE TABLE P ( PI CHAR(6), PNAME CHAR(20), COLOR CHAR(6), WEIGHT NUMERIC(5,1), CITY CHAR(15), PRIMARY KEY ( PI ) ) ; CREATE TABLE SP ( SI CHAR(5), PI CHAR(6), QTY NUMERIC(9), PRIMARY KEY ( Si, Pt ), FOREIGN KEY ( Si ) REFERENCES S, FOREIGN KEY ( Pi ) REFERENCES P ) Рис. 4.1. Определение базы данных поставщиков и деталей средствами языка SQL Одно из важных отличий между рис. 4.1 и его аналогом (рис. 3.9) в главе 3 состоит в том, что на рис. 4.1 нет ничего, соответствующего определениям типов (т.е. операторов TYPE). И причина этого, конечно, заключается в следующем: в языке SQL пользователю не разрещается определять собственные типы. Поэтому для определения столбцов можно использовать только встроенные (определенные системой) типы. В языке SQL поддерживаются следующие встроенные типы, которые фактически не требуют дополнительных разъяснений. CHARACTER [ VARYING 1 (л) INTEGER DATE BIT [ VARYING ] (n) SMALLINT TIME NUMERIC (p,q) FLOAT (p) TIMESTAMP DECIMAL (p,g) INTERVAL В языке SQL/92 разрешается определять собственные типы для так называемых доменов, одтко эти домены на самом деле - не домены (т.е. типы) в реляционном смысле (см. подробности приводятся в главе 5). Замечание. Определяемые пользователем типы данных поддерживаются стандартом SQL3 (приложение Б).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |