Электронный маркетинг

Вид материалаРеферат

Содержание


Реализация реляционных баз данных. Язык SQL
Имена и типы данных
Таблица 7.12 Основные типы данных в SQL
Основные операторы языка SQL
Операторы создания и конструкции описания объектов
1990 And value
Операторы манипулирования данными
Select [all|distinct]
Предоставление полномочий
Тип полномочия
All privileges
Grant select, update
Grant select
Подобный материал:
1   ...   35   36   37   38   39   40   41   42   ...   56

Реализация реляционных баз данных. Язык SQL


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

Большинство использующихся в настоящее время реляционных СУБД поддерживают стандартизованный язык запросов SQL, называемый структурным языком запросов (Structured Query Language). Язык SQL существует в различных формах с середины 1970-х г. После появления в 1970 г. реляционной модели компания IBM инициировала проект по разработке реляционной СУБД, получившей название System R. В рамках этого проекта была создана первая версия языка. Практически одновременно язык SQL был применен в СУБД ORACLE компанией Relation Software Inc, называющейся теперь Oracle Corporation. Система ORACLE, постоянно развиваясь, стала одной из доминирующих коммерческих СУБД.

Международная организация по стандартизации ISO, начиная с 1980-х г., проводила работу по созданию стандарта языков реляционных баз данных. В настоящее время принят в качестве стандарта и нашел применение в коммерческих продуктах язык SQL-92. Далее мы опишем основные особенности этого языка и приведем в качестве примера основные его конструкции.

Язык SQL предназначен для выполнения операций над таблицами и над данными таблиц. К операциям над таблицами относятся операции создания, удаления, изменения структуры таблиц. К операциям над данными относятся выборка, изменение, добавление и удаление записей таблицы. SQL является, таким образом, одновременно и языком описания данных и языком построения запросов.

Язык SQL является непроцедурным языком, то есть он не содержит операторов передачи управления, организации и вызова подпрограмм. В связи с этим SQL не используется автономно, а представляет собой средство манипулирования данными в рамках СУБД и ее встроенного языка программирования (например, языка Visual Basic for Applications СУБД MS Access).

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

Представлением называется множество записей, полученное в результате выборки данных из таблиц схемы. Собственно представление – это структура запроса, который хранится в словаре СУБД, а таблица представления формируется из записей таблиц в момент выполнения запроса.
      1. Имена и типы данных


Имена таблиц и представлений должны быть уникальными в пределах данной схемы, а имена столбцов – уникальными в пределах данной таблицы. Имена объектов могут иметь до 128 символов и состоять из букв латинского алфавита, цифр и символов подчеркивания. Регистр символов (прописные или строчные буквы) значения не имеет. Обращение к полю таблицы в общем случае записывается как имя_таблицы.имя_поля.

Каждому полю необходимо присвоить определенный тип данных. В SQL-92 описаны более десятка типов данных, основные типы приведены в табл. 7.6. Логический тип в описании языка отсутствует.

Таблица 7.12

Основные типы данных в SQL

Тип

Описание

INTEGER

(INT)

Целое число

NUMERIC

Число с фиксированной точкой. Необходимо указать общую длину числа (включая десятичную точку) и количество десятичных знаков после точки. Например, при задании Numeric (6, 2) все числа столбца должны иметь две цифры после десятичной точки и не более трех в целой части.

REAL

Вещественное число одинарной точности. Количество десятичных знаков зависит от конкретной вычислительной системы

DATE

Дата

TIME

Время

CHARACTER

(CHAR)

Строка символов фиксированной длины. Необходимо указывать длину: например,CHAR (20) соответствует строкам из 20 символов

Отметим, что значение длины в байтах и, следовательно, диапазон и точность данных числовых типов определяется конкретной вычислительной системой, на которой реализуется база данных.
      1. Основные операторы языка SQL


Операторы языка SQL подразделяются на операторы создания объектов базы данных и операторы манипулирования данными.
Операторы создания и конструкции описания объектов

Для создания схемы базы данных используется оператор CREATE SCHEMA, например:

CREATE SCHEMA internet_shop

Создание таблицы выполняется оператором CREATE TABLE, в котором указывается имя таблицы и перечисляются имена полей и типов данных. Вводить данные во все поля, кроме ключевых, необязательно. Если же неключевое поле обязательно должен принимать значения, то после типа данных ставится конструкция NOT NULL. Для задания ограничений на значения полей и значений по умолчанию используются конструкции CHECK и DEFAULT соответственно. В конце списка дается описание первичного ключа и внешних ключей, если они существуют. Например, таблица book отношения КНИГА базы данных Интернет-магазина описывается следующим оператором:

CREATE TABLE book

(

isbn char (25),

section char (50) NOT NULL,

name char (255) NOT NULL,

authors char (255) NOT NULL,

publisher char (50),

year int CHECK (VALUE> 1990 AND VALUE<2010),

price numeric (6, 2)

PRIMARY KEY (isbn))

Здесь описана длина текстовых полей, заданы условия на значение для года издания (year), дается ограничение на цену (price) – не более трех знаков в целой части и два знака в дробной, указывается, что такие поля, как раздел литературы, название книги и авторы, должны быть обязательно заполнены при вводе записи о книге (NOT NULL), указан первичный ключ – ISBN-номер книги.

Для указания внешнего ключа в операторе CREATE TABLE применяется конструкция FOREIGN KEY, имеющая следующий формат:

FOREIGN KEY ( поле_внешнего_ключа )

REFERENCES имя_таблицы ( имя_поля)

Здесь поле_внешнего_ключа – имя внешнего ключа в описываемой таблице, конструкция REFERENCES задает ссылку на главную таблицу, с которой должна быть связана описываемая таблица по внешнему ключу. Параметр имя_поля указывает соответствующее поле первичного ключа в главной таблице, его можно опускать, если имена полей в обеих таблицах одинаковы.

Приведем оператор создания таблицы Order для отношения ЗАКАЗ:

CREATE TABLE order

(order_numb int,

customer_numb int,

payment char(20),

order_date date,

deliver_date date,

delivered date,

deliver_kind char(25),

messenger_numb int,

address char(255),

comment char(255),

PRIMARY KEY (order_numb),

FOREIGN KEY (customer_numb) REFERENCES customer,

FOREIGN KEY (deliver_kind) REFERENCES deliver_price,

FOREIGN KEY (messenger_numb) REFERENCES messenger)

Поля customer_numb, deliver_kind и messenger_numb имеют те же названия в связанных таблицах ПОКУПАТЕЛЬ (customer), ЦЕНА ДОСТАВКИ (deliver_price) и КУРЬЕР (messenger), поэтому в качестве ссылки после REFERENCES указаны только имена таблиц.

Для ускорения поиска можно создавать индексы для неключевых полей с помощью оператора CREATE INDEX:

CREATE INDEX имя_индекса

ON имя_таблицы (имя_индексного_поля)

Создадим индекс book_section по полю section (раздел литературы) таблицы book:

CREATE INDEX book_section

ON book (section)

Запросы создаются и сохраняются в словаре базы данных в виде представлений. Для создания представлений используется оператор CREATE VIEW со встроенным оператором выборки записей SELECT. Например, запрос published_2001 на выборку из таблицы book всех книг (поля Наименование, Авторы, Цена), изданных в 2001 году, имеет следующий вид:

CREATE VIEW published_2001 AS

SELECT name, authors, price

FROM book

WHERE year = 2001

Если запрос строится по нескольким связанным таблицам, то в операторе SELECT выбираемые поля указываются в виде имя_таблицы.имя_поля.
Операторы манипулирования данными

Оператор выборки записей SELECT является наиболее важным и имеет большие функциональные возможности. Его полный формат имеет вид:

SELECT [ALL|DISTINCT]

список_полей

FROM список_таблиц

[WHERE условие_выборки]

[GROUP BY поля_группировки]

[ORDER BY поля_сортировки]

Конструкции, приведенные в квадратных скобках, не являются обязательными.

При указании ключевого слова ALL результирующая таблица может иметь повторяющиеся строки. Этот параметр применяется по умолчанию. Использование ключевого слова DISTINCT позволяет включать только неповторяющиеся строки. Рассмотрим пример выборки заказанных книг по разделу «Маркетинг»:

SELECT DISTINCT basket.isbn, book.name, book.authors

FROM basket, book

WHERE book.section = “Маркетинг”

В этом операторе для каждой книги для всех записей таблицы Корзина заказов происходит проверка связанной по ключевому полю isbn записи таблицы book на предмет равенства значения поля section строке “Маркетинг”, и, если это так, то ISBN-код, наименование и авторы книги попадают в результирующую таблицу запроса. Так как одна и та же книга может входить во многие заказы, то во избежание повторов в операторе SELECT указано ключевое слово DISTINCT.

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

SELECT DISTINCT basket.isbn, book.name, basket.quantity*book.price

FROM basket, book

WHERE basket.order_numb = 1623

Если же нужно вычислить полную стоимость каждого заказа, то применяется операнд GROUP BY, позволяющий сгруппировать записи по определенным полям. Для получения стоимостей каждого заказа можно применить оператор:

SELECT basket.order_numb, SUM(basket.quantity*book.price)

FROM basket, book

GROUP BY basket.order_numb

ORDER BY basket.order_numb ASC

Результатом выполнения этого оператора будет таблица, в которой строки таблицы корзины заказов сгруппированы по номеру заказа и рассчитана стоимость всех книг заказа. Оператор ORDER BY указывает, что строки таблицы должны быть упорядочены по возрастанию (ASC) номеров заказов.

Для изменения значений полей записей используется оператор UPDATE:

UPDATE имя_таблицы

SET имя_поля = выражение

[, SET имя_поля = выражение , …]

[WHERE условие]

С помощью оператора UPDATE можно изменить значения в целом ряде записей, например, оператор:

UPDATE book

SET price = price*0.9

WHERE year < 2001

уменьшает на 10% цены всех книг, выпущенных до 2001 года.

Можно изменить и значение одной записи, например, оператор:

UPDATE book

SET price = 65.80

WHERE isbn = “5-7936-0122-5”

присваивает значение новой цены одной книге.

Для ввода новых записей в таблицу используется оператор INSERT:

INSERT INTO имя_таблицы

список_имен_полей

VALUES (список_значений_полей)

Для вставки записи о новой книге нужно использовать следующий оператор INSERT:

INSERT INTO book

isbn, section, name, authors, publisher, year, price

VALUES (“5-7936-0122-5”, “Базы данных”,

“Кузнецов С.Д.”, “КОРОНА принт”, 2001, 56.50)

Список полей может быть опущен, в этом случае список значений должен соответствовать порядку указания полей в операторе создания таблицы.

Удаление записей производится оператором DELETE:

DELETE FROM имя_таблицы

[WHERE условие]

Например, при отмене заказа удаляется запись о нем в таблице order:

DELETE FROM order

WHERE order_numb = 1009

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

Пользователь, создающий объекты базы данных обладает всеми полномочиями на эти объекты, то есть может считывать данные, удалять, модифицировать и добавлять строки в таблицы, изменять структуру таблиц.

Он может передать полные или частичные полномочия на вышеперечисленные действия другим пользователям.

Создатель схемы базы данных может передать свои полномочия другому пользователю с помощью конструкции AUTHORIZATION:

CREATE SCHEMA internet_shop AUTHORIZATION admin

Здесь передаются все права на схему пользователю с идентификатором admin.

Существует шесть типов полномочий на работу с таблицами, который создатель таблиц может предоставить другим пользователям (табл. 2.7).

Таблица 7.13.
Типы полномочий доступа


Тип полномочия

Описание

SELECT

Разрешается читать записи из таблицы или представления

INSERT

Разрешается вводить новые строки

UPDATE

Разрешается изменять строки, может быть предоставлено только для указанных полей

DELETE

Разрешается удалять строки

REFERENCES

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

ALL PRIVILEGES

Предоставляются все полномочия из списка


Информация о полномочиях доступа хранится в словаре данных. При попытке пользователя произвести манипулирование данными СУБД просматривает словарь данных, определяет полномочия пользователя на указанное действие с конкретной таблицей или представлением, и, только если эти полномочия предоставлены, выполняет обращение к базе данных.

Для предоставления полномочий используется оператор GRANT. Чтобы, например, предоставить полномочия по выборке, добавлению и изменению информации о курьерах менеджеру по кадрам, нужно применить оператор:

GRANT SELECT, UPDATE

ON messenger TO personnel_manager

Здесь пользователю с идентификатором personnel_manager предоставляются указанные права на работу с таблицей курьеров messenger.

Если нужно предоставить какие-то права всем пользователям базы данных, то используется операнд PUBLIC:

GRANT SELECT

ON book TO PUBLIC

В данном примере разрешается предоставлять возможность выборки информации по книгам всем пользователям базы данных.

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