Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных

^ Лекция 14. Стандартный язык баз данных SQL
В этой лекции мы кратко разглядим главные особенности эталона языка SQL 1989г.
14.1. Типы данных
В языке SQL/89 поддерживаются последующие типы данных: CHARACTER, NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, DOUBLE Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных PRECISION. Эти типы данных классифицируются на типы строк знаков, четких чисел и ориентировочных чисел.

К первому классу относится CHARACTER. Спецификатор типа имеет вид CHARACTER (lenght), где lenght задает длину строк Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных данного типа. Заметим, что в SQL/89 нет типа строк переменного размера, хотя в почти всех реализациях они допускаются. Литеральные строчки знаков изображаются в виде 'последовательность знаков' (к примеру, 'example').

Представителями второго класса типов являются Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных NUMERIC, DECIMAL (либо DEC), INTEGER (либо INT) и SMALLINT. Спецификатор типа NUMERIC имеет вид NUMERIC [(precision [, scale]). Специфицируются четкие числа, представляемые с точностью precision и масштабом scale. Тут и дальше, если опущен Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных масштаб, то он полагается равным 0, а если опущена точность, то ее значение по дефлоту определяется в реализации.

Спецификатор типа DECIMAL (либо DEC) имеет вид NUMERIC [(precision [, scale]). Специфицируются четкие числа, выставленные Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных с масштабом scale и точностью, равной либо большей значения precision.

INTEGER специфицирует тип данных четких чисел с масштабом 0 и определяемой в реализации точностью. SMALLINT специфицирует тип данных четких чисел с масштабом 0 и определяемой Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных в реализации точностью, не большей, чем точность чисел типа INTEGER.

Литеральные значения четких чисел в общем случае представляются в форме

[+|-] [.].

В конце концов, в классу типов данных ориентировочных чисел относятся Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных типы FLOAT, REAL и DOUBLE PRECISION. Спецификатор типа FLOAT имеет вид FLOAT [(precision)]. Специфицируются ориентировочные числа с двоичной точностью, равной либо большей значения precision.

REAL специфицирует тип данных ориентировочных чисел с точностью, определенной в Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных реализации. DOUBLE PRECISION специфицирует тип данных ориентировочных чисел с точностью, определенной в реализации, большей, чем точность типа REAL.

Литеральные значения ориентировочных чисел в общем случае представляются в виде E.

Заметим, что хотя Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных с внедрением языка SQL можно найти схему БД, содержащую данные хоть какого из перечисленных типов, возможность использования этих данных в прикладных системах находится в зависимости от используемого языка программирования. Весь набор Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных типов данных можно использовать, только если программировать на ПЛ/1. Потому в неких реализациях SQL типы данных с масштабом и точностью вообщем не поддерживаются.

Хотя правила встраивания SQL в программки на языке Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных Си не определены в SQL/89, в большинстве реализаций, поддерживающих такое встраивание, имеется последующее соответствие меж типами данных SQL и типами данных Си: CHARACTER соответствует строчкам Си; INTEGER соответствует long; SMALLINT соответствует short; REAL Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных соответствует float; DOUBLE PRECISION соответствует double (конкретно такое соответствие утверждено в эталоне SQL/92).

Заметим еще, что в большинстве реализаций SQL поддерживаются некие дополнительные типы данных, к примеру, DATE, TIME, INTERVAL Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных, MONEY. Некие из этих типов специфицированы в эталоне SQL/92, но в текущих реализациях синтаксические и семантические характеристики таких типов могут различаться.

^ 14.2. Средства определения схемы

Средства определения схемы БД в эталоне SQL/89 относятся к более Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных слабеньким и допускающим различную интерпретацию частям эталона. Более того, мне неведома ни одна реализация, в какой поддерживался бы в точности таковой набор средств определения схемы.

Потому, чтоб достигнуть мобильности прикладной системы в Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных довольно широком классе реализаций SQL/89, нужно кропотливо локализовать составляющие определения схемы БД. Думаю, что идеальнее всего сосредоточить всю работу со схемой БД в одном модуле и подразумевать, что при переходе к другой СУБД Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных очень возможно будет нужно переделка этого модуля.

Особо отметим, что в SQL/89 вообщем отсутствуют какие-либо средства конфигурации схемы БД: нет способности удалить схему таблицы, добавить к схеме таблицы новый столбец и Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных т.д. Во всех реализациях такие средства поддерживаются, но они могут различаться и синтаксисом, и семантикой.

Невзирая на отсутствие особенных надежд на то, что получится повстречать реализацию, поддерживающую язык определения Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных схем SQL/89, мы кратко опишем этот язык (без синтаксических деталей), чтоб оценить на содержательном уровне способности SQL/89 в этой части и получить хотя бы какие-то средства сопоставления различных реализаций.

^ 14.2.1. Оператор определения схемы

В Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных согласовании с правилами SQL/89 любая таблица данной БД имеет обычное и квалифицированное имена. В качестве квалификатора имени выступает "идентификатор возможностей" таблицы, который обычно в реализациях совпадает с именованием некого юзера, и квалифицированное имя Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных таблицы имеет вид:

.

Подход к определению схемы в SQL/89 заключается в том, что все таблицы с одним идентификатором возможностей создаются (определяются) методом выполнения 1-го оператора определения схемы. При всем этом в Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных эталоне не определяется метод выполнения оператора определения схемы: должен ли он производиться исключительно в интерактивном режиме либо может быть встроен в программку, написанную на классическом языке программирования.

В операторе определения схемы содержится идентификатор Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных возможностей и перечень частей схемы, любой из которых может быть определением таблицы, определением представления (view) либо определением приемуществ. Каждое из этих определений представляется отдельным оператором SQL/89, но они все, как Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных уже говорилось, должны быть интегрированы в оператор определения схемы.

Для этих операторов мы приведем синтаксис, так как это позволит четче обрисовать их особенности.

14.2.2. Определение таблицы

Оператор определения таблицы имеет последующий синтаксис:

::=


^ CREATE TABLE
(



[{,
}...])


::=





|


Не считая имени Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных таблицы, в операторе специфицируется перечень частей таблицы, любой из которых служит или для определения столбца, или для определения ограничения целостности определяемой таблицы. Требуется наличие хотя бы 1-го определения столбца. Оператор CREATE TABLE Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных определяет так именуемую базисную таблицу, т.е. реальное хранилище данных.

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

^ 14.2.3. Определение Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных столбца

Оператор определения столбца описывается последующими синтаксическими правилами:

::=





[] [...]


::=


^ DEFAULT NULL


::=


NOT NULL []


|


| CHECK ()

Как видно, не считая неотклонимой части, в какой определяется имя столбца и его тип данных, определение столбца может содержать два Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных необязательных раздела: раздел значения столбца по дефлоту и раздел ограничений целостности столбца.

В разделе значения по дефлоту указывается значение, которое должно быть помещено с строчку, заносимую в данную таблицу, если значение данного Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных столбца очевидно не обозначено. Значение по дефлоту может быть обозначено в виде литеральной константы с типом, подходящим типу столбца; методом задания ключевика USER, которому при выполнении оператора занесения строчки соответствует символьная строчка, содержащая имя Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных текущего юзера (в данном случае столбец обязан иметь тип символьных строк); либо методом задания ключевика NULL, значащего, что значением по дефлоту является неопределенное значение. Если значение столбца по дефлоту не Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных специфицировано, и в разделе ограничений целостности столбца обозначено NOT NULL, то попытка занести в таблицу строчку с неспецифицированным значением данного столбца приведет к ошибке.

Указание в разделе ограничений целостности NOT NULL приводит к Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных неявному порождению проверочного ограничения целостности для всей таблицы (см. последующий подраздел) "CHECK (C IS NOT NULL)" (где C - имя данного столбца). Если ограничение NOT NULL не обозначено, и раздел умолчаний отсутствует, то Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных неявно порождается раздел умолчаний DEFAULT NULL. Если указана спецификация уникальности, то порождается соответственная спецификация уникальности для таблицы.

Если в разделе ограничений целостности обозначено ограничение по ссылкам данного столбца (), то порождается соответственное определение ограничения Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных по ссылкам для таблицы:

^ FOREIGN KEY(C) .

В конце концов, если обозначено проверочное ограничение столбца, то условие поиска этого ограничения должно ссылаться лишь на данный столбец, и неявно порождается соответственное проверочное ограничение для Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных всей таблицы.

^ 14.2.4. Определение ограничений целостности таблицы

Ограничения целостности таблицы владеют последующим синтаксисом:

::=





|


|


::=


()


::= UNIQUE | PRIMARY KEY


::= [{,}...]


::=


^ FOREIGN KEY ()


::=


REFERENCES


::=


::=


[()]


::= [{,}...]


::= CHECK ()

Для одной таблицы может быть задано несколько ограничений целостности, в том числе те Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных, которые неявно порождаются ограничениями целостности столбцов. Эталон SQL/89 устанавливает, что ограничения таблицы практически проверяются при выполнении каждого оператора SQL.

Замечание: Наличие верно подобранного набора ограничений БД очень принципиально для надежного функционирования Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных прикладной информационной системы. Вкупе с тем, в неких СУБД ограничения целостности фактически не поддерживаются. Потому при проектировании прикладной системы нужно принять решение о том, что более значительно: рассчитывать на поддержку ограничений целостности, но ограничить Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных набор вероятных СУБД, либо отрешиться от их использования на уровне SQL, сохранив возможность использования не самых современных СУБД.

Дальше T обозначает таблицу, для которой определяются ограничения целостности.

^ Ограничение уникальности

Каждое имя столбца в Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных перечне уникальности должно называть столбец T и не должно заходить в этот перечень более 1-го раза. При определении столбца, входящего в перечень уникальности, должно быть обозначено ограничение столбца NO NULL. Посреди Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных ограничений уникальности T не должно быть более 1-го определения первичного ключа (ограничения уникальности с главным словом RIMARY KEY).

Действие ограничения уникальности заключается в том, что в таблице T не допускается возникновение 2-ух Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных либо более строк, значения столбцов уникальности которых совпадают.

^ Ограничение по ссылкам

Ограничение по ссылкам от данного набора столбцов CT таблицы T на данный набор столбцов CT1 некой определенной к этому моменту таблицы Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных T1 определяет условие на содержимое обеих этих таблиц, при котором ссылки можно считать корректными.

Если перечень столбцов CT1 очевидно специфицирован в определении ограничения по ссылкам, то требуется, чтоб этот перечень очевидно заходил Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных в какое-либо определение уникальности таблицы T1. Если же перечень CT1 не специфицирован очевидно в определении ограничения по ссылкам таблицы T, то требуется, чтоб в определении таблицы T1 присутствовало определение Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных первичного ключа, и перечень CT1 неявно полагается совпадающим со перечнем имен столбцов из определения первичного ключа таблицы T1. Имена столбцов списков CT и CT1 должны называть столбцы таблиц T и T1 соответственно, и не должны Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных появляться в перечнях более 1-го раза. Списки столбцов CT и CT1 должны содержать однообразное число частей, и столбец таблицы T, идентифицируемый i-ым элементом перечня CT обязан иметь тот же Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных тип, что столбец таблицы T1, идентифицируемый i-ым элементом перечня CT1.

По определению, таблицы T и T1 удовлетворяют данному ограничению по ссылкам, если для каждой строчки s таблицы T таковой, что все Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных значения столбцов s, идентифицируемых перечнем CT, не являются неопределенными, существует строчка s1 таблицы T1 такая, что значения столбцов s1, идентифицируемых перечнем CT1, позиционно равны значениям столбцов s, идентифицируемых перечнем CT. По Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных человечески это можно сконструировать так: ограничение по ссылкам удовлетворяется, если для каждой корректной ссылки существует объект, на который она ссылается. В обычной программерам терминологии, ограничение по ссылкам не позволяет создавать "висящие" ссылки Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных, не ведущие ни к какому объекту.

^ Проверочное ограничение

Проверочное ограничение специфицирует условие, которому должна удовлетворять в отдельности любая строчка таблицы T. Это условие не должно содержать подзапросов, спецификаций агрегатных функций, также ссылок Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных на наружные переменные либо характеристик. В него могут заходить только имена столбцов данной таблицы и литеральные константы.

Таблица удовлетворяет проверочному ограничению целостности в том и исключительно в том случае, когда вычисление условия для Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных каждой строчки таблицы дает true.

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

^ 14.2.5. Определение представлений

Механизм представлений (view) является Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных массивным средством языка SQL, позволяющим скрыть реальную структуру БД от неких юзеров за счет определения представления БД, которое реально является неким хранимым в БД запросом с именованными столбцами, а для Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных юзера ничем не отличается от базисной таблицы БД (с учетом технических ограничений). Неважно какая реализация должна гарантировать, что состояние представляемой таблицы точно соответствует состоянию базисных таблиц, на которых определено представление. Обычно вычисление представляемой таблицы Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных (материализация соответственного запроса) делается всякий раз при использовании представления.

В эталоне SQL/89 оператор определения представления имеет последующий синтаксис:

::=


^ CREATE VIEW
[()]


AS [WITH CHECK OPTION]


::= [{,}...]

Определяемая представляемая таблица V является изменяемой (т.е Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных. по отношению к V можно использовать операторы DELETE и UPDATE) в том и исключительно в том случае, если производятся последующие условия для спецификации запроса:

Замечание: Эти ограничения являются очень сильными. В реализациях они могут Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных быть ослаблены. Но если стремиться к мобильности, не следует воспользоваться расширенными способностями.

Если в перечне подборки спецификации запроса имеется хотя бы одно арифметическое выражение, состоящее не из одной спецификации столбца, либо если Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных одно имя столбца участвует в перечне подборки более 1-го раза, определение представления должно содержать перечень имен столбцов представляемой таблицы. Более просто, необходимо очевидно называть столбцы представляемой таблицы, если эти имена не наследуются Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных от столбцов таблиц раздела FROM спецификации запроса.

Требование WITH CHECK OPTION в определении представления имеет смысл исключительно в случае определения изменяемой представляемой таблицы, которая определяется спецификацией запроса, содержащей раздел WHERE. При наличии этого требования Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных не допускаются конфигурации представляемой таблицы, которые приводят к возникновению в базисных таблиц строк, не видимых в представляемой таблице (т.е. таких строк, которые не удовлетворяют условию поиска раздела WHERE Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных спецификации запроса). Если WITH CHECK OPTION в определении представления отсутствует, таковой контроль не делается.

^ 14.2.6. Определение льгот

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

В SQL/89 определяется облегченная схема механизма льгот. Во-1-х, "раздача" приемуществ вероятна только при определении таблицы Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных. Во-2-х, юзер, получивший некие привилегии от других юзеров, может передать их далее только при определении схемы.

Определение льгот делается в последующем синтаксисе:


::=


GRANT
ON
TO


[{,}...] [WITH GRANT OPTION]


::=


^ ALL PRIVILEGES


| [{,}...]


::= SELECT Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных | INSERT | DELETE


| UPDATE [()]


| REFERENCES [(]


::= [{,}...]


::= PUBLIC |

Смысл механизма определения приемуществ в SQL/89 довольно понятен из этого синтаксиса. Заметим только, что льготой REFERENCES по отношению к обозначенным столбцам таблицы T1 нужно владеть, чтоб иметь возможность Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных при определении таблицы T найти ограничение по ссылкам меж этой таблицей и имеющейся к этому моменту таблицей T1.

Снова заметим, что хотя в общем смысле во всех SQL-ориентированных СУБД поддерживается Лекция 14. Стандартный язык баз данных SQL - Основы современных баз данных механизм защиты доступа на базе приемуществ, реализации могут различаться в деталях. Это снова то место, которое необходимо локализовывать, если стремиться к созданию мобильной прикладной системы.


lekciya-1-vvedenie-v-predmet.html
lekciya-10-41investicionnaya-deyatelnost-i-investicionnaya-politika-predpriyatiya.html
lekciya-10-fiziologiya-dvizhenij-i-fiziologiya-aktivnosti-refleksiya.html