Структура языка SQL. 10
Основные данные о работе
| Версия шаблона | 2.1 |
| Филиал | Великолукский |
| Вид работы | Курсовая работа |
| Название дисциплины | Базы данных |
| Тема | Структура языка SQL |
| Фамилия студента | Шилов |
| Имя студента | Илья |
| Отчество студента | Михайлович |
| № контракта | 01900100601004 |
Содержание
Введение.................
1.Типы
данных языка SQL..............
1.1.
Идентификаторы языка SQL...........................
1.2.
Точные числовые данные........
1.3.
Скалярные типы данных языка
SQL...........................
1.4
Средства поддержки
1.5.
Обязательные данные...........
1.6.
Ограничения……………..............
2.
Определение данных............
2.1.
Создание баз данных...........
2.2.
Изменение содержимого базы
2.3.
Создание таблиц...............
2.4.
Модификация определения
2.5.
Удаление таблиц………………………………...
3.
Запросы и права доступа.......
3.1
Представления……………………………………………
3.2.
Транзакций в SQL..............
3.3.
Управление доступом к данным………………….................
3.4.
Идентификаторы пользователей
3.5.
Привилегии……………………………………………………
Заключение....................
Список
использованных источников....................
Приложения………………………………………
Введение
В последие годы наблюдается значительный рост объемов и усложнение структурной сложности данных, также диверсификация в сфере пользователей БД (баз данных) и постоянное улучшение производительности технической базы. Так как база данных это по сути хранилище различных объектов (данных), возникла необходимость в структуризации и систематизации хранящейся в БД информации, а также возможности создания взаимосвязей между объктами.
Для удобства любые данные в БД можно представить как совокупность двумерных таблиц. Эта идея легла в основу реляционной модели представления данных (англ. relation). Для управления данными и осуществления доступа к ним используются информационно-поисковые языки (или языки запросов). Одним из них является SQL (англ. Structured Query Language — «язык структурированных запросов»).
Язык SQL был создан британскими учеными в компании IBM в середине 70-х для взаимодействия с базами. Первоначально язык именовался SEQUEL (англ. Structured English Qeury Language - структурированный английский язык запросов) и был ориентирован в основном на простых, неискушенных в программировании пользователей для формирования запросов, хотя и содержал достаточный инструментарий для средств определения и манипулирования схемой БД.
Первым официальным стандартом языка стал SQL-86, принятый ANSI (англ. American National Standards Institute) в 1986 году и ISO (англ. International Organization for Standardization) в 1987 году и незначительно уточненный в 1989 году.
В силу разнообразия функционала и наличия расширенных версий стандарта у разных производителей СУБД (систем управления баз данных) в целях придания языку SQL большей универсальности форма стандарта была преобразована в модульную структуру. Базовая часть стандарта была вынесена в отдельный раздел «SQL/Foundation», отсальные были распределены в отдельные модули. Таким образом, для всех СУБД существует только один уровень совместимости, называемый Core и означающий поддержку только основного модуля стандарта. Поддержка остальных возможностей оставлена на усмотрение производителей СУБД. Все версии стандарта, начиная с SQL:1999, придерживаются данной политики.
Язык SQL является самым первым и на сегодняшний день единственным стандартным языком работы с базами данных, который получил столь широкое распространение. Существует еще один стандартный язык для работы с базами данных, NDL (Network Database Language), который построен на использовании сетевой модели CODASYL, но он применяется лишь в немногочисленных разработках. Бльшинство крупнейших разработчиков СУБД в настоящее время разрабатывают свои продукты с использованием языка SQL, либо интерфейса SQL, и значительная часть таких компаний являются участниками, по меньшей мере, одной организации, которая занимается разработкой стандартов этого языка. В SQL делаются огромные инвестиции как со стороны разработчиков, так и со стороны пользователей. Он активно используется как часть архитектуры приложений (в качестве примера можно привести System Application Architecture (SAA) корпорации IBM), а также является приоритетной стратегией выбора многих крупных и влиятельных организаций (например, консорциума X/Open, занимающегося разработкой стандартов для среды UNIX), язык SQL также принят в качестве федерального стандарта обработки информации (Federal Information Processing Standard — FIPS), который должен соблюдаться в СУБД как непременное условие возможности продавать ее на территории США. Консорциум разработчиков SQL Access Group прилагает усилия по созданию расширенных версий языка SQL, которые позволят обеспечить взаимодействие разнородных систем.
Язык SQL используется в разработке других стандартах и используется как инструмент их определения (например, стандарты ISO "Information Resource Dictionary System" (IRDS) и "Remote Data Access" (RDA)). Разработка языка вызвает достаточную заинтересованность научных кругов, выражающуюся как в выработке необходимой теоретической базы, так и в подготовке технических решений, которые можно было бы успешно реализовать в этой сфере. Это в большей степени касается работ по оптимизации запросов, разработке методов распределения данных и реализации средств защиты. Начали появляться специализированные реализации языка SQL, предназначенные для новых рынков, такие как OnLine Analytical Processing (OLAP).
SQL
нельзя в полной мере отнести
к традиционным языкам
Основная часть
1. Типы данных языка SQL
В
этом разделе будут рассмотрены типы
данных SQL, определяемые стандартом ISO.
1.1 Идентификаторы языка SQL
В языке SQL идентификаторы выполняют функцию обозначения объектов в базе данных, т.е. являются именами таблиц, представлений и столбцов. Символы, которые допустимо использовать в идентификаторах языка SQL, которые создает пользователь, должны быть четко определены. Стандарт ISO однозначно определяет набор символов, который должен использоваться по умолчанию; в него входят строчные и прописные буквы латинского алфавита (A-Z, a-z), цифры (1-9) и символ подчеркивания (_). Допустимо использование альтернативного набора символов.
На формат идентификаторов
- должен начинаться с буквы;
- может иметь длину до 128 символов ;
- не может содержать пробелов.
В языке SQL/89 поддерживаются следующие типы данных:
CHARACTER(n) или CHAR(n) — символьные строки постоянной длины в n
символов. При задании данного типа под каждое значение всегда отводится п
символов, и если реальное значение занимает менее, чем n символов, то СУБД
автоматически дополняет недостающие символы пробелами.
NUMERIC[(n,m)] — точные числа, здесь n — общее количество цифр в числе, m —
количество цифр слева от десятичной точки.
INTEGER или INT — целые числа.
SMALLINT — целые числа меньшего диапазона.
FLOAT[(n)] — числа большой точности, хранимые в форме с плавающей точкой.
Здесь n — число байтов, резервируемое под хранение одного числа. Диапазон чисел
определяется конкретной реализацией.
REAL — вещественный тип чисел, который соответствует числам с плавающей
точкой, меньшей точности, чем FLOAT.
DOUBLE PRECISION специфицирует тип данных с определенной в реализации
точностью большей, чем определенная в реализации точность для REAL.
46
В стандарте SQL92 добавлены следующие типы данных:
VARCHAR(n) — строки символов переменной длины.
BIT(n) — строка битов постоянной длины.
BIT VARYING(n) — строка битов переменной длины.
DATE — календарная дата.
ТIMESТАМР(точность) — дата и время.
INTERVAL — временной интервал.
В стандарте SQL1 не были определены встроенные функции, однако в большинстве
коммерческих СУБД такие функции были реализованы, и в стандарт SQL2 уже введен ряд
стандартных встроенных функций:
BIT_LENGTH(cтpoкa) — количество битов в строке;
САSТ(значение AS тип данных) — значение, преобразованное в заданный тип
данных;
CHAR_LENGTH(cтpoкa) — длина строки символов;
CURRENT_DATE - текущая дата;
CURRENT_TIME(точность) — текущее время с указанной точностью;
CURRENT_TIMESTAMP(точность) — текущие дата и время с указанной
точностью;
LOWER(cтpокa) — строка, преобразованная к верхнему регистру;
SUBSTRING(cтpoкa FROM n FOR длина) — часть строки, начинающаяся с n-го
символа и имеющая указанную длину;
UPPER(строка)
— строка, преобразованная к верхнему
регистру.
1.4 Средства поддержки целостности данных
Средства поддержки целостности данных включают в себя средства задания ограничений, которые накладываются для защиты базы от нарушения структурной стройности данных, помещенных в базу. Подобные ограничениия задаются спомощью операторов CREATE TABLE и ALTER TABLE [Документация Microsoft SQL Server 2000].
1.5 Обязательные данные
Предположим, что в некоторых столбцах наличие соответствющего и удовлетворяющего всем условиям заполнения и отличного от неопределенного значения, обязательно для каждой строки. В таком случае используется значение NULL, не являющееся ни пустым строковым значениям, ни нулевым числовым значениями; оно служит для замещения данных, которые определенный момент отсутствуют в таблицы, но чье наличие обязательно. Чтобы задавать ограничения подобного рода стандарт ISO также допускает использоваание идентификатора NOT NULL, (задается в указанных выше операторах). В таком случае , система не позволяет поместить в данный столбец пустое значение. По умолчанию применяется спецификатор NULL.
1.6 Ограничения
Каждый столбец имеет
CHECK {search Condition}
В случае применения этой конструкции для отдельного столбца позволяется ссылаться только на определяемый столбец.
Впрочем, стандарт ISO дает возможность определять и немного более сложные домены. Для этого используется альтернативный механизм — применяется оператор CREATE DOMAIN.
Каждый домен, который был создан, получает уникальное имя, которое задается параметром domain Name, тип данных, задаваемый параметром dataType, а также необязательные атрибуты - характеристики по умолчанию, определяемые параметром defaulCOption, и набор допустимых значений, который, как было указано выше, декларируется в конструкции CHECK. Нужно заметить, что описанный формат оператора CREATE DOMAIN не является полным, но в достаточной степени демонстрирует базовые возможности.
Для удаления доменов из базы данных применяется оператор DROP DOMAIN.
Для
однозначного задания способа удаления
домена используются отдельные спецификаторы
(RESTRICT или CASCADE) определяющие, какие действия
должны выполнятся в базе данных, если
домен используется в момент удаления.
В случае задания спецификатора RESTRICT,
домен, задействованный в существующей
таблице (в представлении или определении
проверки), то в таком случае операция
удаления оканчивается неудачей. Если
применен спецификатор CASCADE, то изменнения
автоматически вносятся в любой столбец
таблицы, основанный на определении домена,
таким способом, чтобы в нем использоваался
базовый тип данных домена, а любые ограничения
или применяемые по умолчанию конструкции
операторов для этого домена заменяются
в случае необходимости ограничениями
самого столбца.
2. Определение данных
Язык
определения данных SQL DDL (Data Definition Language)
позволяет создавать и
CREATE SCHEMA
CREATE DOMAIN
CREATE TABLE
CREATE VIEW
ALTER DOMAIN
ALTER TABLE
DROP SCHEMA
DROP DOMAIN
DROP TABLE
DROP VIEW
Данные транзакции применяются для создания, изменнеия и удаления структур, которые входят в состав оригинальной схемы. Во некоторых СУБД зарезервированы также дополнительные операторы, не предусмотренные стандартом ISO - CREATE INDEX и DROP INDEX.
Помимо этого, администратор базы данных имеет возможность воспользоваться и другими дополнительными командами для более точного уточнения характеристик хранимых данных.
2.1 Создание баз данных
За счет широкого спектра форматов СУБД процедура создания в них баз данных может существенно отличаться. В многопользовательских системах возможность создания баз данных делегируется исключитьльно администратору БД. В системах однопользовательского режима база данных, предусмотренная по умолчанию, может быть создана прямо непосредственно в процессе установки и настройки параметров самой СУБД. Все другие базы данных могут создаваться пользователем по мере возниконовения необходимости2. Стандарт ISO не задает строгих рамок, как нужно создавать БД, поэтому в каждом из диалектов языка SQL может применяться индивидуальный подход. Согласно стандарту ISO, все таблицы и прочие объекты базы данных организованы в определенной среде (environment). Каждая среда обязательно имеет структуру, представленную наличием каталогов (catalog), каждый из которых состоит из набора схем (schema). Схема представляет собой полный поименованный список объектов базы данных, связанных друг с другом определенным образом (т.е. все объекты в базе данных должны быть задекларированы в какой-нибудь схеме). Объектами схемы могут являться домены, представления, таблицы, утверждения, сопоставления, толкования и наборы символов. Все объекты схемы принадлежат одному и тому же владельцу и обладают множеством общих значений.
Этот стандарт оставляет право выбора конкретного способа написания и удаления каталогов за разработчиком СУБД, но регламентирует механизм создания и удаления схем. Оператор определения схемы представлен следующим форматом:
CREATE. SCHEMA [nаmе | AUTHORIZATION Creator-Identifier]
В стандарте ISO также указано, что должна существовать возможность наделения строго определяемым диапазоном средств в рамках данного оператора каждого пользователя разрабатываемой схемы. Разумеется, конкретные способы задания этих привилегий в разных СУБД различаются. Схема должна удаляться с помощью оператора DROP SCHEMA, который имеет следующий формат:
DROP SCHEMA Name [ RESTRICT | CASCADE]
В случае, если указано ключевое слово RESTRICT, то схема должна быть пустой, в противном случае выполнение операции будет отменено. Если же указано ключевое слово CASCADE, то при выполнении оператора автоматически будут удаляться все связанные с удаляемой схемой объекты. Если одна из этих операций удаления завершится неудачно (вне зависимости от ключевого слова), выполнение всего оператора будет отменено. Суммарный эффект от выполнения оператора с параметром CASCADE может затронуть значительную часть базы данных, поэтому подобные операторы следует использовать с особой осторожностью.
В настоящее время операторы CREATE SCHEMA и DROP SCHEMA реализованы в весьма узком кругу СУБД.
2.2
Изменение содержимого
базы данных
SQL является многофункциональным языком работы с данными, который может использоваться не только для выборки данных из базы, так и для модификации ее содержимого. В операции манипулирования данными входят три операции:
-
операция удаления записей,
-
операция добавления новых
- операция обновления (изменения записей) — ей соответствует оператор UPDATE.
Для всех операторов манипулирования данными допустимо изменения данных только в одной таблице.
2.3 Создание таблиц
Вторым этапом после создания общей структуры базы данных является создание таблиц, которые будут представлять отношения, связываающие входящюю в базу информацию. Для этого применяется оператор CREATE TABLE, имеющий следующий общий формат:
CREATE TABLED TableName
{ (Colum Name data Type [NOT NULL] [UNIQUE]
[DEFAULT default option] [CHSCK (search Condition}:] [, …] }
[PRIMARY KEY (List Of Columns) ]
{ [UNIQUE {list Of Columns) ] [,. . .] }
{ [FOREIGN KEY ( list Of Fdreign Key Columns)
REFERENCES Parent Table Name [(list Of Candidate Key Coluims) ],
[MATCH {PARTIAL | FULL}
[ON UPDATE. Referential Action]
[ON DELETE referential Action] } [, , .-.] }
{[CHECK (search Condition)] [, . , , ] } )
В данном случае оператор CREATE TABLE включает в себя средства описания ограничений (например, ссылочной целостности). Функциональность самого оператора и степень затребованности тех или иных ограничений в значительной степени зависят от использованного администратором диалекта языка SQL. По «правилам хорошего тона» в базе данных надлежит использовать все поддерживаемые ограничения, без исключения, так как это позволяет повысить качество создаваемой БД.
Результатом работы декларированного выше оператора будет таблица, ее имя будет определяется параметром Table Name, а структура будет состоять из столбцов типа data Type. Для определения значения, которое будет применятся по умолчанию при вставке данных в соответствующий столбец, дополнительно введена необязательная конструкция DEFAULT. В базе данных это значение применяется по умолчанию в случаях, когда в операторе INSERT не задано значение для такого столбца. Помимо других значений, функция определения применяемого по умолчанию значения default option может включать литеры. Другие подобные конструкции называются ограничениями таблицы и могут быть ввведены в качестве дополнения с помощью следующей конструкции:
CONSTRAINT Constraint Name
Данная конструкция позволяет удалить ограничение в процессе дальнейшего использования таблицы, указав его имя в операторе ALTER TABLE. Транзакция PRIMARY KEY дефинирует один или несколько столбцов, образующих первичный ключ таблицы. В случае, когда данная конструкция включается в диалект SQL, реализованный в конкретной базе данных, то она обязана применяться при создании каждой из таблиц. По умолчанию, для всех столбцов, образующих первичный ключ, предусмотрено применение ограничения NOT NULL. При создании таблицы позволяется использование строго только одной конструкции PRIMARY KEY. База данных пресекает все попытки запуска транзакций UPDATE или INSERT, так как они могут повлечь за собой появление строк с задвоенной информацией в столбце (нескольких столбцах) PRIMARY KEY. Таким образом, в базе данных обеспечивается уникальность значений для первичного ключа. В конструкции FOREIGN KEY дефинируется внешний ключ одной таблицы и ее связь с другой (родительской) таблицей. Эта конструкция позволяет осуществлять ограничения ссылочной целостности и структурирована на несколько частей:
- Список ListOfForeignKeyColumns, содержащий имена одного или нескольких столбцов создаваемой таблицы из числа тех, которые образуют внешний ключ.
- Необязательная функция обновления ON UPDATE, служащая для определения взаимосвязи между таблицами, которая управляет порядком выполнения действий (referential Action) при обновлении в родительской таблице некоторого потенциального ключа определенного отношения, являющегося внешним ключом дочерней таблицы. В качестве характеристики referential Action можно указать CASCADE или NO ACTION. Если вышеописанная не использована, то по умолчанию подразумевается, что никакие действия выполнятся не будут в соответствии со значением NO ACTION.
- Так же необязательное правило удаления ON DELETE, определяющее взаимосвязи между таблицами, которое управляет порядком выполнения действий (referential Action) при удалении в родительской таблице некоторого потенциального ключа определенного отношения, являющегося внешним ключом дочерней таблицы. Определение параметра referential Action аналогично заданию этого параметра для функцииы ON UPDATE.
- По умолчанию ограничение ссылочной целостности выполянется, если какой-либо компонент внешнего ключа содержит значение NULL или в родительской таблице присустствует соответствующая строка. Функция MATCH позволяет ввести опциональные ограничения, касающиеся применения значений NULL во внешнем ключе. Если был задан параметр MATCH FULL, то возможны два варианта: либо все составляющие внешнего ключа должны быть пусты (NULL), либо все должны иметь непустые значения. А если был задан параметр MATCH PARTIAL, тогда ситуация следующая: либо все составляющие внешнего ключа должны быть пусты (NULL), либо же в родительской таблице существует хотя бы одна строка, удовлетворяющая этому ограничению, если все остальные значения NULL были подставлены правильно.
Оператор создания таблицы может содержать любое количество конструкций FOREIGN KEY. Функции CHECK и CONSTRAINT дают возможность вводить дополнительные ограничения. Если конструкция CHECK применяется как ограничение столбца, то она может ссылаться только на определяемый столбец. В действительности ограничения контролируются после применения любого оператора SQL к таблице, для которой они заданы, но эта проверка может быть отсрочена до окончания выполнения той транзакции, в состав которой входит данный оператор SQL.