Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шпора

.pdf
Скачиваний:
36
Добавлен:
14.05.2015
Размер:
1.3 Mб
Скачать

1.1. Определение информационной системы, способы структурирования информации. Определения: база данных, СУБД, транзакция, согласованность данных. История развития СУБД. Функции и назначение СУБД. Технологии доступа к данным.

Информационная система (ИС) взаимосвязанная совокупность средств, методов и персонала, используемая для хранения, обработки и представления информации.

К функциям ИС относятся: ●хранение информации; ●ввод и редактирование информации; ●просмотр и поиск информации; ●выборка информации по заданным критериям; ●подготовка отчётов; ●контроль правильности информации Структурирование информации – введение каких-либо соглашений о способах представления данных.

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

Конечному пользователю не нужно знать:

-о физическом размещении в памяти данных и их описаний

-об особенностях реализации механизмов поиска запрашиваемых данных

-о способах разрешения конфликтов, возникающих при одновременном запросе одних и тех же данных многими пользователями

-Об организации защиты данных от некорректных обновлений или несанкционированного доступа

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

Определения:

База данных - это совокупность сведений о конкретных объектах реального мира в какой-либо предметной области.

Система управления базами данных (СУБД) – это комплекс программных и языковых средств, необходимых для создания баз данных, поддержания их в актуальном состоянии и организации поиска в них необходимой информации. Если же модификация данных в этих файлах – то это СУБД Транзакция – последовательность операций над БД, рассматриваемых СУБД как единое целое.

Согласованность данных (ссылочная целостность):

Связи между данными, хранимыми в разных отношениях, в

реляционной

БД

 

устанавливаются

с

помощью

использования внешних

ключей — для установления связи между

кортежем из отношения A с определённым кортежем отношения B в

предусмотренные

 

для

этого

атрибуты

кортежа

отношения A записывается

значение первичного ключа

в общем

случае значение потенциального ключа)

целевого

кортежа

 

 

 

 

 

 

 

отношения B. Таким образом, всегда имеется возможность выполнить две операции:

1)определить, с каким кортежем в отношении B связан определённый кортеж отношения A;

2)найти все кортежи отношения A, имеющие связи с определённым кортежем отношения B.

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

Ссылочная целостность может быть проиллюстрирована следующим образом: Дана пара отношений A и B, связанных внешним ключом. Первичный ключ отношения B — атрибут B.key. Внешний ключ

отношения A,

ссылающийся на B

атрибут A.b.

Ссылочная

целостность

для пары отношений A и B имеет место

тогда, когда

выполняется условие: для каждого кортежа отношения A существует

соответствующий кортеж отношения B,

то есть кортеж, у которого

(B.key = A.b).

 

 

 

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

Если вышеприведённое условие не выполняется, говорят, что в базе данных нарушена ссылочная целостность. Такая БД не может нормально эксплуатироваться, так как в ней разорваны логические связи между зависимыми друг от друга фактами. Непосредственным результатом нарушения ссылочной целостности становится то, что корректным запросом не всегда удаётся получить корректный результат.

История развития СУБД

Предшественниками СУБД были файловые системы (ФС), однако появление СУБД не привело их к полному исчезновению. В середине 60 годов в корпорации IBM совместно с фирмой NAA разработали первую СУБД – иерархическую систему IMS, она является самой первой из коммерческих СУБД. Она и до сих пор остается основной иерархической СУБД используемой на большинстве мейнфреймов. Другим заметным достижение середины 60 г. Было появление системы IDS. Развитие этой системы привело к созданию нового типа систем управления БД – сетевых СУБД. Сетевая схема – это логическая организация всех баз данных, которая включает в себя: определение имени БД, типа каждой записи и компонентов каждого типа. Подсхема – это часть БД, видимая конкретными пользователями или приложениями. Язык управления данными – инструмент для определения характеристик и структуры данных, а также для управления ими.

Группа DBSG – предложила стандартизировать три различных языка: 1)язык определения данных DDL, который позволит АБД описать её; 2)язык определения данных для подсхемы который позволит определять в приложениях те части БД, доступ к которым будет необходим; 3)язык манипулирования данными DML, предназначенный для управления данными. CODASYL – СУБД первого поколения.

Недостатки:

1.Даже для выполнения простых запросов с использованием переходов и доступом к определенным записям необходимо создавать сложные программы.

2.Независимость от данных существует лишь в min степени.

3.Отсутствуют теоретические основы.

В 1970 г. Э.Ф. Кодд работавший в корпорации IBM опубликовал статью о реляционный модели данных, позволяющих устранить недостатки прежних моделей.

Проект System R – первый коммерческий проект. На основе этого проекта были получены важнейшие результаты.

• Был разработан структурированный язык запросов (SQL) который стал стандартный языком любых реляционных СУБД.

• В 80 г. Были созданы различный коммерческие реляционные СУБД. SQL/DS компании IBM. Корпорация Oracle.

Назначение СУБД: 1)должна воспринимать и обрабатывать

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

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

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

4)желательно, чтобы в СУБД были реализованы механизмы оптимизации выполнения перечисленных выше операций.

Функции СУБД:

1)Непосредственное управление данными во внешней памяти.

2)Управление буферами оперативной памяти (собственный набор буферов и протоколов буферизации данных)

3)Управление транзакциями

4)Журнализация (способность восстановить последнее согласованное состояние БД после любого аппаратного или программного сбоя) 5)Поддержка языков баз данных

Технологии доступа к БД:

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

Распределённая БД состоит из нескольких серверов, хранимых в различных ЭВМ, связанных сетями между собой. В таких БД может храниться пересекающаяся или дублирующаяся информация. Для работы с такой базой данных используется система управления распределёнными базами данных (СУРБД).

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

Технология «клиент-сервер» подразумевает, что помимо хранения базы данных центральный компьютер (сервер базы данных) должен ещё и обеспечивать выполнение основного объёма обработки этих данных. Запрос клиента (программы-клиента) на выполнение какойлибо операции с данными провоцирует на сервере поиск и извлечение данных. Клиентская часть (Front-End) обеспечивает графический интерфейс и находится на компьютере пользователя; серверная часть (Back-End) обеспечивает управление данными, разделение информации, администрирование и безопасность. Примерами являются MS SQL Server, Oracle , IBM DB 2, SyBase .

1.2. Этапы проектирования баз данных. Инфологическая, концептуальная, даталогическая, физическая модели. ER-модели, термины инфологического моделирования. Виды связей между сущностями. Модели данных: иерархическая, сетевая, реляционная, объектно-ориентированная.

Этапы проектирования:

1)Системный анализ и словесное описание информационных объектов предметной области и связей между ними. Как результат формулируется ТЗ на разработку базы данных.

2)Проектирование инфологической модели предметной области в терминах некоторой семантической модели.

3)Выбор конкретной СУБД и даталогическое или логическое проектирование БД. Декомпозиция отношений.

4)Физическое проектирование БД, то есть выбор эффективного размещения БД на внешних носителях и способа доступа к ней.

Инфологическая (внешняя) модель данных – обобщённое, не привязанное к к-л ЭВМ или СУБД описание предметн области. Концептуальная модель способ логического упорядочения данных.

Даталогическая (внутренняя) описание данных на языке конкретной СУБД.

Физическая модель – описание расположения хранимых данных и методов доступа к ним.

Цель инфологического моделирования (ИМ) – обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных. Инфологическое моделирование прежде всего связано с попыткой представления семаники предметной области в модели БД.

Основным инструментом разработки инфологических моделей (прежде всего для реляционных баз данных) в настоящий момент являются диаграммы «сущность-связь» (Entity-Relationship). Предложен этот способ моделирования в 1976 г. Питером Пин-Шэн Ченом. В настоящее время используются различные нотации этой модели. Мы будем рассматривать ER-диаграммы в нотации Баркера.

Конструктивные элементы инфологического моделирования: Сущность (Entity) – объект либо совокупность объектов, имеющих существенное значение для рассматриваемой предметной области, информация о которых подлежит хранению. Сущность имеет имя, уникальное в пределах моделируемой системы. С помощью сущности описывается класс однотипных объектов, т.е. предполагается, что в системе существует множество экземпляров данной сущности. Экземпляры сущности должны иметь некоторые уникальные признаки, позволяющие отличать их друг от друга.

Сущность на диаграммах изображается в виде прямоугольника с наименованием.

Атрибут сущности – этот некоторая характеристика экземпляра сущности, определяющая свойства данного представителя класса. При этом набор атрибутов должен быть таким, чтобы можно было различать конкретные экземпляры сущности. Например, атрибутами сущности «книги» могут являться «название», «количество страниц», «издательство», «цвет обложки».

Атрибуты записываются внутри прямоугольника-сущности, по одному на строку.

Ключ сущности – неизбыточный набор атрибутов, значения которых в совокупности являются уникальными для каждого экземпляра сущности. Неизбыточность заключается в том, что удаление любого атрибута из ключа должно приводить к нарушению его уникальности. Либо так: ключевым называют набор атрибутов, однозначно идентифицирующий конкретный экземпляр сущности.

Атрибуты, входящие в ключ на диаграмме, выделяются подчёркиванием.

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

Связи делятся на три типа по множественности:

- один-к-одному (1:1) – экземпляр одной сущности связан только с одним экземпляром другой сущности;

-один-ко-многим (1:М) – один экземпляр сущности может быть связан с несколькими экземплярами другой сущности;

-многие-ко-многим (М:М) – один экземпляр первой сущности связан с несколькими экземплярами второй сущности, и наоборот, один экземпляр второй сущности связан с несколькими экземплярами первой сущности. Пример – верхняя связь на рисунке: студенты слушают лекции многих преподавателей, и преподаватели читают лекции многим студентам. Следует отметить, что тип «многие ко многим» является временным типом связи, допустимым на ранних этапах разработки инфологической модели. В дальнейшем она заменяется на две связи (1:М) путём создания промежуточной сущности. В нашем случае это может быть сущность «расписание лекций».

Другой пример – сущность «авторы» и сущность «книги». Некоторые книги написаны несколькими авторами, а некоторые авторы написали более одной книги. Для разрешения связи (М:М) необходима дополнительная сущность «титульная страница», содержащая в числе прочих атрибуты «название книги» и «фамилия автора».

Связи также делятся на два типа по модальности: «обязательная» и «возможная». Связь является обязательной, если в ней должен участвовать каждый экземпляр сущности; возможной – если не каждый экземпляр сущности должен участвовать в связи. При этом связь может быть обязательной со стороны одной сущности и возможной со стороны другой. Пример – нижняя связь на рисунке: студент, пишущий диплом, всегда имеет научного руководителя, а преподаватель может иметь одного или несколько дипломников, или вовсе их не иметь.

Модели доступа к данным.

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

Иерархическая модель. БД состоит из упорядоченного набора древовидных структур данных. Организационные структуры, списки материалов, оглавления в книгах, планы проектов и многие другие совокупности данных могут быть представлены в иерархическом виде. При этом автоматически поддерживается целостность ссылок между предками и потомками. Основное правило: никакой потомок не может существовать без своего родителя, причём потомок имеет единственного родителя. Недостатком модели является сложность реорганизации данных и невозможность выполнения «горизонтальных» запросов к данным, не связанных с иерархической структурой.

Иерархическая модель появилась первой среди всех даталогических моделей: именно эту модель поддерживала первая из зарегистрированных промышленных СУБД IMS IBM (1968г). Каждая физическая база описывается набором операторов, определяющих как её логическую структуру, так и структуру хранения баз данных.

Основные термины:

1)Атрибут (элемент данных) – наименованная единица структуры данных. Каждому элементу при описании БД присваивается уникальное имя. Элемент данных часто называют полем.

2)Запись (группа) – именованная совокупность атрибутов. Использование записей позволяет за одно обращение к базе получить некоторую логическую связанную совокупность данных. Именно записи изменяются, добавляются и удаляются. Тип записи определяется составом ее атрибутов. Экземпляр записи – конкретная запись с конкретным значением элементов.

3)Групповое отношение – иерархическое отношение между записями двух типов. Родительская запись (владелец группового отношения) называется исходной записью, а дочерние записи (члены группового отношения) – подчиненными. Иерархическая БД может хранить только такие древовидные структуры.

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

Основное отличие:

запись может быть членом более чем одного группового отношения; каждое групповое отношение именуется и проводится различие между его типом и экземпляром; тип группового отношения задается его именем и определяет свойства общие для всех экземпляров данного типа; экземпляр группового отношения представляется записью-владельцем и множеством (возможно пустым) подчиненных записей. При этом имеется следующее ограничение: экземпляр записи не может быть членом 2 экземпляров групповых отношений одного типа.

Характерист. признаки экземпляра группового отношения:

Способ упорядочения произвольных записей: произвольный, хронологический (очередь), обратный хронологический (стек), сортированный.

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

Режим включения подчиненных записей:

автоматический (невозможно занести в БД запись без того, чтобы она была сразу же закреплена за неким владельцем); ручной (позволяет запомнить в БД подчиненную запись и не включать

ее немедленно в экземпляр группового отношения; позже эта операция инициируется пользователем).

Режим исключения. Выделяют 3 класса членства подчиненных записей в групповых отношениях:

фиксированное (подчиненная запись жестко связана с записью владельца и ее можно исключить из группового отношения только удалив); обязательное (допускается переключение подчиненной записи на др.

владельца, невозможно ее существование без владельца); необязательное (можно искл. запись из группового отношения, но сохранить в БД не прикрепляя к др. владельцу).

Основные термины:

Элемент данных – минимальная информационная единица, доступная пользователю с использованием СУБД.

Агрегат – поименованный набор данных. Агрегат данных типа «вектор» - линейный набор элементов данных (например агрегат «Адрес: город, улица, дом, квартира»). Агрегат данных типа «повторяющаяся группа» соответствует совокупности векторов данных. Например, агрегат «Зарплата: месяц, сумма (х 12)».

Запись – совокупность агрегатов или элементов данных, моделирующая некоторый класс объектов реального мира. Для записи вводятся понятия типа записи и экземпляра записи.

Связь или набор – двухуровневый граф, связывающий отношением «1:M» 2 типа записи. Связи именуются. Для любых двух типов записей может быть задано любое количество связей.

Некоторые правила и термины построения сетевой модели:

Тип связи L определяется для типа записи предка P и потомка C. Экземпляр типа связи состоит из одного экземпляра типа записи предка и упорядоченного набора экземпляров типа записи потомка. При этом (1) каждый экземпляр типа P является предком только в одном экземпляре L; (2) Каждый экземпляр C является потомком не более чем в одном экземпляре L.

Следствия таких правил таковы:

Тип записи С в связи L1 может быть типом записи P в связи L2 (обычная иерархическая модель).

Тип записи P может быть таковым в любом числе типов связи.

Тип записи P может фигурировать как тип записи C в любом числе типов связи.

Может существовать любое число типов связи с одним и тем же типом записи P и типом записи C.

Одни и те же типы записей могут быть предком и потомком в связи L1 и потомком и предком в связи L2.

Стандарт сетевой модели впервые был определен в 1975 году организацией CODASYL, которая определила базовые понятия модели и формальный язык описания. Типичным представителем является Integrated Database Management System (IDMS) компании Cullinet Software, Inc.

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

Объектно-ориентированная модель. Её структура описывается с помощью трёх ключевых понятий:

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

-Наследование – подразумевает возможность создавать из классов объектов новые классы объектов, которые наследуют структуру и методы своих предков, добавляя к ним (или исключая) структуру данных и методы, отражающие их собственную индивидуальность.

-Полиморфизм – различные объекты в зависимости от внешних событий могут вызывать одинаково названные методы, но по-разному реализованные.

Особенностью ООБД является: невозможность применения к хранимым объектам понятий и алгоритмов реляционной модели. В этой связи необходим некоторый процедурный язык для оформления запросов и обработки данных. Обеспечение целостности данных заключается в (1) автоматической поддержке отношений наследования; (2) возможности объявлять поля и методы объекта как «скрытые» (т.е. невидимые для других объектов); (3) реализовывать процедуры контроля целостности данных внутри объектов.

Примеры ООБД: Caché, FastObjects, GemStone/S, Jasmine, к ним примыкает объектно-реляционная СУБД PostgeSQL.

1.3. Понятия реляционной модели: атом, домен, кортеж, отношение. Термины реляционной модели и теории множеств. Свойства реляционных баз данных. Реляционная алгебра. Операции над множествами. Примеры.

Понятия реляционной модели:

Атом в БД это ячейка. И она должна быть заполнена.

Атомарность данных - свойство данных, означающее их неделимость для операций используемой модели представления и обработки данных. т.е. данные рассматриваются, адресуются и обрабатываются как единое целое (как одно значение).

Домен (Domain) – некоторое конечное множество. Обозначение: Di , где i – номер домена. Отдельный элемент домена обозначим di с тем же смыслом i.

Полное декартово произведение множеств – набор всевозможных сочетаний из n элементов каждое, где каждый элемент берётся из

своего домена. Описание: D1 D2 … Dn.

Отношение (relation) R – подмножество декартова произведения множеств D1, D2, … Dn (n≥1), необязательно различных. Описание: RD1 D2 … Dn.

Число n называется степенью отношения (n = 1 – унарное, n = 2 – бинарное, в общем случае n-арное).

Атрибутом (Attribute) называют домен, входящий в отношение. Степень отношения определяет количество атрибутов в отношении. Кортежем (Tuple) называют декартово произведение элементов

множеств d1 d2 … dn.

Атрибуты, значения которых однозначно идентифицируют кортежи, называются ключевыми. Отношение может содержать несколько ключей. Всегда один из ключей объявляется первичным (primary key), его значения не могут обновляться. Все остальные ключи отношения называются возможными (потенциальными) ключами.

Схемой отношения S называется перечень имён атрибутов данного отношения с указанием домена, к которому они относятся. Описание:

SR= (A1, A2, …, An), Ai Di.

Набор именованных схем отношений – схему БД.

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

Отношения удобно представлять в виде таблиц.

Можно условно связать язык формальной логики, язык инфологических моделей и практический язык терминов реляционных БД с помощью следующей таблицы «синонимов»:

Инфологическая

Реляционная

Описание

модель

модель

реляционной СУБД

Сущность

Отношение

Таблица

 

Атрибут

Атрибут

Поле

(названия

 

 

столбцов)

 

Экземпляр сущности

Кортеж

Запись

(строка

 

 

таблицы)

 

???

Домен

Общая

 

 

 

совокупность

 

 

допустимых

 

 

значений

 

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

Аспекты реляционного подхода:

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

структурной части, манипуляционной части и целостной части.

1.В структурной части модели фиксируется, что единственной структурой данных, используемой в реляционных БД, является

нормализованное n-арное отношение.

2.В манипуляционной части модели утверждаются два фундаментальных механизма манипулирования реляционными БД:

реляционная алгебра и реляционное исчисление.

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

Свойства реляционных баз данных (вытекают из определения отношения и кортежа как множеств):

● В отношении нет одинаковых кортежей; ● Отсутствие упорядоченности кортежей; ●Отсутствие упорядоченности атрибутов; ●Все значения атрибутов отношения атомарные

Реляционная алгебра:

Алгеброй называется множество объектов с заданной на нём совокупностью операций, замкнутых относительного этого множества. Коддом было предложено 8 операций, хотя это множество избыточное, так как некоторые операции могут быть представлены друг через друга.

Теоретико-множественные операции:

1.Объединение отношений. Результатом объединения двух отношений является отношение, включающее все кортежи, входящие

хотя бы в одно из отношений-операндов. Обозначение: R3 = R1

2.

Операция коммутативна.

 

2.Пересечение отношений. Результатом пересечения двух отношений является отношение, включающее все кортежи, входящие в оба

отношения-операнда. Обозначение: R3 = R1

2. Операция

коммутативна.

 

3.Разность отношений. Отношение, являющееся разностью двух отношений включает все кортежи, входящие в отношение-первый операнд, такие, что ни один из них не входит в отношение, являющееся вторым операндом. Обозначение: R3 = R1 \ R2. Операция некоммутативна.

Пример на первые три операции:

Предметная область: экзамен по курсу «Методы вычислений», который проводился в сентябре и декабре. Пусть имеются три отношения, имеющие эквивалентные схемы:

R1 = (Номер зачетки, ФИО, Группа) – список студентов, сдававших экзамен в сентябре;

R2 = (Номер зачетки, ФИО, Группа) – список студентов, сдававших экзамен в декабре;

R3 = (Номер зачетки, ФИО, Группа) – список студентов, сдавших экзамен по курсу до января месяца;

Ударим реляционной алгеброй по следующим вопросам:

а) Какие студенты сдавали два раза, но так и не сдали экзамен?

Ответ: R = R1 R2 \ R3.

б) Какие студенты сдавали экзамен только один раз, и сдали его?

Ответ: R = (R1 \ R2 R3) (R2 \ R1 R3).

в) Какие студенты смогли сдать экзамен только со второго раза?

Ответ: R = R1 R2 R3.

г) Какие студенты сдавали экзамен один раз, не сдали, и больше не появлялись?

Ответ: R = (R1 \ R2) (R2 \ R1) \ R3.

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

4.Прямое произведение отношений (расширенное декартово произведение). Результатом прямого произведения двух отношений является отношение, кортежи которого являются конкатенацией (сцеплением) кортежей первого и второго операндов. Обозначение: R1 R2. Операция коммутативна. Операция используется для получения отношения, которое характеризует все возможные комбинации между

элементами отдельных множеств.

 

 

Специальные реляционные операции:

 

5.Ограничение

отношения

(горизонтальная

фильтрация).

Результатом ограничения отношения по некоторому условию является отношение, включающее кортежи отношения-операнда, удовлетворяющее этому условию. Обозначение: R[ (r)], где - булевское выражение, составленное из термов сравнения с помощью связок «И», «ИЛИ», «НЕ» и скобок. Унарная операция.

На интуитивном уровне операцию ограничения лучше всего представлять как взятие некоторой "горизонтальной" вырезки из таблицы. Пример: выбрать из R3 студентов из группы 21402. Запишем так: R4 = R3 [Группа = 21403].

6.Проекция отношения (вертикальная фильтрация). Результатом проекции отношения R на заданный набор его атрибутов B является отношение, кортежи которого производятся путем взятия соответствующих значений из кортежей отношения-операнда. Обозначение: R[B]. Значения, не принадлежащие атрибутам из набора В, удаляются. Унарная операция.

Продолжаем наш пример: R = R4[Номер зачетки, ФИО].

7.Соединение отношений (соединение по условию). При соединении

двух отношений R и Q

 

 

 

результирующее

отношение,

кортежи

которого

являются

конкатенацией кортежей первого и второго отношений и удовлетворяют этому условию. Обозначение: R [ ]Q.

По определению результатом операции сравнения является отношение, получаемое путем выполнения операции ограничения по условию прямого произведения отношений R и Q. Операция соединения называется операцией эквисоединения, если условие соединения имеет вид (a = b), где a и b - атрибуты разных операндов соединения. Такое соединения применяется к паре отношений R и Q, обладающих общим атрибутом (т.е. атрибутом с одним и тем же именем и определенным на одном и том же домене). На интуитивном уровне это способ связи таблиц, имеющих одинаковое по смыслу поле.

8.Деление отношений. Пусть заданы два отношения – R(a1, a2, ..., an, b1, b2, ..., bm) и T(b1, b2, ..., bm). Будем считать, что атрибут bi отношения R и атрибут bi отношения T не только обладают одним и тем же именем, но и определены на одном и том же домене. Назовем множество атрибутов {aj} составным атрибутом A, а множество атрибутов {bj} - составным атрибутом B. После этого будем говорить о реляционном делении бинарного отношения R(A,B) на унарное отношение T(B). Результатом деления является унарное отношение Q(A), состоящее из таких кортежей v, которые в отношении R фигурировали как кортежи-сцепления <v, w>, в которых множество

значений {w} включало множество значений атрибута B в отношении T. Обозначение: R[A:B]T.

Предположим, что имеются два отношения: Студенты(Имя, Группа) и Имена(Имя), причем унарное отношение Имена содержит все имена студентов в университете. Тогда после выполнения операции реляционного деления отношения Студенты на отношение Имена будет получено унарное отношение, содержащее номера групп, в которых студенты обладают всеми возможными в университете именами.

1.4. Понятия ключа и ссылочной целостности данных. Первичный, альтернативный и внешний ключи, их свойства. Способы поддержания ссылочной целостности. Нормализация отношений в БД, необходимость нормализации, определение функциональной зависимости атрибутов. Типы и примеры нормальных форм.

В отношении может быть одновременно несколько потенциальных ключей. Один из них может быть выбран в качестве первичного ключа отношения, тогда другие потенциальные ключи называют альтернативными ключами.Например, в таблицу Клиенты можно было бы добавить столбец серия и номер паспорта (или два столбца - серия и номер отдельно), и это был бы альтернативный ключ таблицы

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

Потенциальный ключ должен иметь следующие свойства:

-уникальность (на практике – обязательное условие);

-неизбыточность (на практике – может быть нарушено);

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

Неключевым атрибутом называется любой атрибут отношения, не входящий в состав ни одного возможного ключа. Атрибут, не входящий в состав первичного ключа, назовём непервичным.

Различные объекты предметной области, информация о которых хранится в базе данных, всегда взаимосвязаны друг с другом. Например, накладная на поставку товара содержит список товаров с количествами и ценами, сотрудник предприятия имеет детей, числится в подразделении и т.д. Термины "содержит", "имеет", "числится" отражают взаимосвязи между понятиями. Такие взаимосвязи отражаются в реляционных базах данных при помощи внешних ключей , связывающих несколько отношений.

Пусть дано отношение R. Подмножество атрибутов А отношения R будем называть внешним ключом, если:

1.Существует отношение S (R и S не обязательно различны) с потенциальным ключом K.

2.Каждое значение A в отношении R всегда совпадает со значением K для некоторого кортежа из S, либо является null-значением. Отношение S называется родительским отношением, отношение R

называется дочерним отношением.

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

1.Правило структурной целостности: допускается работа только с однородными структурами данных типа «реляционное отношение».

2.Правило целостности объектов: первичный ключ отношения не должен содержать значений NULL.

3.Правило языковой целостности: реляционная СУБД должна обеспечивать языки описания и манипулирования данными не ниже стандарта SQL.

Ссылочная целостность обеспечивает поддержку непротиворечивого состояния БД в процессе модификации данных при выполнении операций добавления или удаления.

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

Поддерживается один из двух принципов взаимосвязи между экземплярами кортежей взаимосвязанных отношений:

- кортежи подчинённого отношения уничтожаются при удалении кортежа основного отношения, связанного с ними.

- кортежи основного отношения модифицируются при удалении кортежа основного отношения, связанного с ними, при этом на месте ключа родительского отношения ставится значение NULL.

Для внешнего ключа характерны следующие свойства:

- Каждое значение атрибута внешнего ключа должно являться значением соответствующего потенциального ключа. Причём обратное необязательно.

- Количество атрибутов внешнего ключа должно соответствовать количеству атрибутов потенциального ключа.

Если внешний ключ – составной, то потенциальный – составной.

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

- Каждый атрибут, входящий в данный внешний ключ, должен быть пределен на том же домене, что и соответствующий атрибут потенциального ключа.

- Для атрибутов внешнего ключа разрешается иметь знач NULL.

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

Нормализация отношений в базе данных.

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

функциональных зависимостей между атрибутами отношений. Функциональной зависимостью набора атрибутов B отношения R

от набора атрибутов А того же отношения называется такое соотношения проекций (это копия отношения, в которую не включены один или несколько атрибутов исходного отношения.) R[A] и R[B], при котором в каждый момент времени любому элементу проекции R[A] соответствует только один элемент проекции R[B], входящий вместе с ним в какой-либо кортеж отношения R. Обозначение: R.A R.B

Взаимно-независимые – атрибуты, которые не зависят функционально друг от друга.

Аксиомы функциональных зависимостей:

1. Рефлексивность: если B А, то А B.

2.Дополнение: если А B, то АС BС.

3.Транзитивность: если А B и B C, то А С.

Проектирование схемы базы данных обычно осуществляется путём декомпозиции (разбиения) исходного набора отношений, при этом полученные отношения являющихся проекциями исходных.

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

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

Нормализация – это процесс проектирования схемы базы данных с использованием декомпозиции. Каждой нормальной форме соответствует некоторый определённый набор ограничений, и отношение находится в некоторой нормальной форме, если удовлетворяет свойственному ей набору ограничений.

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

Это определение является синонимом определения отношения в теории реляционных баз данных. Пример отношения, которое НЕ находится в 1NF: расписание занятий.

Для перевода отношения в 1NF необходимо разделить с дублированием содержания общие ячейки на отдельные записи.

2NF. Отношение находится во второй нормальной форме тогда и только тогда, когда оно находится в первой нормальной форме и не содержит неполных функциональных зависимостей непервичных атрибутов от атрибутов первичного ключа.

Функциональная зависимость R.A R.B называется полной, если набор атрибутов В функционально зависит от А, но не зависит функционально от любого подмножества А, то есть если А1 А R.A –/ R.B. В противном случае функциональная зависимость называется неполной.

Пример отношен., кот. НЕ находится во 2NF: результаты сессии.

Рассмотрим отношение R ( ФИО, номер зачетки, группа, дисциплина,

оценка ). Первичный ключ подчеркнут. Однако при этом атрибуты (ФИО, группа) зависят только от части первичного ключа – от атрибута (номер зачетки).

При этом возможны следующие аномалии:

-в результате ошибки оператора студенту по результатам одного или нескольких экзаменов приписали не ту группу.

-если студент не сдал ни одного экзамена, то он не существует.

Для приведения отношения во 2NF следует провести декомпозицию (разбить на проекции), например так:

1.R1 ( ФИО, номер зачетки, группа).

2.R2 (номер зачетки, дисциплина, оценка ).

Приведение таблицы ко второй нормальной форме позволяет избежать повторения (избыточности) данных.

3NF. Отношение находится в третьей нормальной форме тогда и только тогда, когда оно находится во второй нормальной форме и

не содержит транзитивных зависимостей.

 

 

Функциональная зависимость

R.A

R.B является

транзитивной,

если существует набор атрибутов C такой, что:

 

 

1.

С не является подмножеством А.

 

 

 

2.

С не включает в себя В. (В

С)

 

 

 

3.

Существует функциональная зависимость R.A

R.С.

4.

Не существует функциональной зависимости R.С

R.А.

5.

Существует функциональная зависимость R.С

R.B.

Иными словами, требование 3NF сводится к тому, чтобы все неключевые поля зависели только от первичного ключа и не зависели друг от друга.

Пример отношения, которое находится во 2NF, но НЕ находится в 3NF: связь студента с группой, факультетом, специализацией.

Дано отношение: R(№зачетки, ФИО, группа, факульт, кафедра).

Первичный ключ подчеркнут. Так как он состоит из одного атрибута, то критерий 2NF выполнен. В отношении имеются транзитивные зависимости, в числе которых:

1)номер зачётки группа (обратное неоднозначно), группа факультет, номер зачётки факультет.

2)номер зачётки кафедра, кафедра факультет, номер зачётки факультет.

Для приведения отношения в 3NF требуется декомпозиция следующего вида:

1. R1 ( номер зачетки, ФИО, группа ). 2. R2 ( группа, факультет).

3. R3 ( кафедра, факультет ).

BCNF. Отношение находится в нормальной форме Бойса-Кодда, если оно находится в третьей нормальной форме и каждый детерминант отношения является возможным ключом этого отношения.

Определение: Если в отношении существует несколько функциональных зависимостей, то каждый атрибут или набор атрибутов, от которого зависит другой атрибут, называется детерминантом отношения. Иными словами, отношение находится в BCNF, если любая функциональная зависимость между его атрибутами сводится к полной функциональной зависимости от возможного ключа. Пример отношения, которое находится в 3NF, но НЕ находится в BCNF: таблица результатов приемных экзаменов:

Дано отношение: R(идентифик, №паспорта, предмет, оценка).

Ответ на вопрос: зачем? Например, один абитуриент потерял свою карточку и ему выдали другую с другим номером. Второй абитуриент

– гениальный ребенок, и у него пока нет паспорта. Имеются следующие функциональные зависимости:

1.Идентификатор, предмет оценка;

2.Номер паспорта, предмет оценка; (зависимость полная)

3.Идентификатор номер паспорта; (зависимым не является непервичный атрибут)

4.Номер паспорта идентификатор.

Транзитивных зависимостей нет, так как зависимость 3 имеет обратную 4. Таким образом, отношение находится в 3NF. Но функциональные зависимости между атрибутами идентификатор и номер паспорта не являются зависимостями от возможного ключа этого отношения. Для приведения отношения в BCNF возможна декомпозиция следующего вида:

1.R1 ( идентификатор, предмет, оценка).

2.R2 ( идентификатор, номер паспорта).

Ответ на вопрос: зачем? (Тоже самое что и выше).

В большинстве случаев достижение третьей нормальной формы или даже формы Бойса-Кодда считается достаточным для реальных проектов баз данных, однако в теории нормализации существуют и другие нормальные формы:

4NF. Отношение находится в четвёртой нормальной форме в том и только в том случае, если существует многозначная зависимость А –>> B и все остальные атрибуты R функционально зависят от А.

Определение: В отношении R(A,B,C) существует многозначная зависимость R.A –>> R.B в том и только в том случае, если множество значений В, соответствующее паре значений атрибутов А и С, зависит только от А и не зависит от С.

Иными словами, отношение находится в четвёртой нормальной форме, если оно находится в BCNF, и все его многозначные зависимости являются функциональными зависимостями от потенциальных ключей.

Пример (1) отношения, котор. НЕ находится в 4NF: список дисциплин, которые предстоит прослушать студенту 1 курса:

Дано отношение: R( номер зачетки, группа, дисциплина ). Перечень дисциплин, которые должен слушать студент на первом курсе, определяется исключительно номером группы,

а не номером зачетки. То есть, в данном отношении существуют две многозначные зависимости:

1.группа –>> дисциплина.

2.группа –>> номер зачетки.

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

При этом возможны следующие аномалии:

-Мы не можем хранить инфу о новой группе и перечне её дисциплин до тех пор, пока в неё не будут зачислены студенты.

-Если в группу добавляется новый студент, то необходимо сгенерировать для него весь перечень дисциплин для данной группы. Для приведения отношения в 4NF возможна декомпозиция следующего вида:

1. R1 ( номер зачетки, группа).2. R2 (группа, дисциплина ).

Пример (2): меню:

Исходное отношение: R( блюдо, повар, рецепт ). Повар умеет готовить разные блюда, одинаково названные блюда могут отличаться рецептом приготовления.

Декомпозиция:

3. R1 ( повар, блюдо). 4. R2 (блюдо, рецепт).

5NF (PJ/NF). Отношение R находится в пятой нормальной форме (норм. форме проекции-соединения) в том и только в том случае, когда любая зависимость соединения в R следует из существования некоторого возможного ключа в R.

Определение: Отношение R (A, B, … Z) удовлетворяет зависимости соединения (А, B, … Z) в том и только в том случае, когда R восстанавливается без потерь путём соединения своих проекций на A, B, … Z (наборы атрибутов отношения R). Полной декомпозицией отношения называют такую совокупность произвольного числа его проекций, соединение которых полностью совпадает с содержимым исходного отношения.

Иными словами, отношение находится в пятой нормальной форме тогда и только тогда, когда в каждой его полной декомпозиции все проекции содержат возможный ключ.

Пример отношения, которое находится в 4NF, но НЕ находится в 5NF: почасовики.

Дано отношение: R( преподаватель, кафедра, дисциплина). Считается,

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

атрибутов. В отношении отсутствуют многозначные зависимости, и поэтому оно находится в 4NF. Однако в нём

нет наборов атрибутов, которые составляют возможные ключи отношения, и потому это отношение не в PJ/NF. При этом провести полную декомпозицию на два отношения нельзя.

Возможна декомпозиция следующего вида:

1.R1 ( преподаватель, кафедра).

2.R2 (преподаватель, дисциплина ).

3.R3 (кафедра, дисциплина).

Отношение, не имеющее ни одной полной декомпозиции, также находится в пятой нормальной форме.

2.1. БД в архитектуре «клиент-сервер». Требования к многопользовательским сетевым реляционным базам данных. Основные характеристики, возможности и сравнительный анализ современных сетевых реляционных баз данных.

Технология «Клиент – Сервер» подразумевает, что помимо хранения базы данных центральный компьютер (сервер базы данных) должен ещё и обеспечивать выполнение основного объёма обработки этих данных. Запрос клиента (программы-клиента) на выполнение какойлибо операции с данными провоцирует на сервере поиск и извлечение данных. Клиентская часть (Front - End) обеспечивает графический интерфейс и находится на компьютере пользователя; серверная часть (Back - End) обеспечивает управление данными, разделение информации, администрирование и безопасность. Примерами СУБД, работающих по технологии клиент-сервер, являются MS SQL Server,

Oracle, IBM DB 2, SyBase.

Основной принцип технологии «клиент-сервер» применительно к технологии БД заключается в разделении функций стандартного интерактивного приложения на 5 групп, имеющих различную природу:

1.функции ввода и отображения информации (Presentation Logic);

2.прикладные функции, определяющие основные алгоритмы решения задач приложения (Business Logic);

3.функции отображения данных внутри приложения (Database Logic);

4.функции управления информационными ресурсами (Database

Manager System);

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

Требования. Структура сервера БД. Включает следующие компоненты:

1.подсистема взаимодействия с клиентским приложением – поддержание связи с клиентом. Механизм его работы выглядит следующим образом. Подсистема взаимодействия «прослушивает» сеть в ожидании клиентских запросов на установление соединения. Когда такой запрос обнаруживается, порождается новый процесс, который будет обеспечивать связь с данным клиентом. Клиенту сообщается идентификатор данного процесса, в дальнейшем клиент передает свои запросы и получает данные, взаимодействуя с этим интерфейсным процессом. После того, как клиент закрывает соединение, обслуживающий его процесс прекращается. Характеристики интерфейсных процессов зависят от ОС, под которой исполняется сервер БД.

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

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

соединений, устанавливается порядок их выполнения.

 

4.подсистема

выполнения

транзакций

выполняется

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

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

Основные характеристики, возможности и сравнительный анализ современных сетевых реляционных баз данных.

Информация в базе данных некоторым образом структурирована, т. е. ее можно описать моделью представления данных (моделью данных), которые поддерживаются СУБД. Эти модели подразделяют на иерархические, сетевые и реляционные.

При использовании иерархической модели представления данных связи между данными можно охарактеризовать с помощью упорядоченного графа (или дерева). В программировании при описании структуры иерархической базы данных применяют тип данных «дерево».

Основными достоинствами иерархической модели данных являются:

1)эффективное использование памяти ЭВМ;

2)высокая скорость выполнения основных операций над данными;

3)удобство работы с иерархически упорядоченной информацией.

К недостаткам иерархической модели представления данных относятся:

1)громоздкость такой модели для обработки информации с достаточно сложными логическими связями;

2)трудность в понимании ее функционирования обычным пользователем.

Незначительное число СУБД построено на иерархической модели данных.

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

Достоинствами сетевой модели представления данных являются:

1)эффективность в использовании памяти компьютера;

2)высокая скорость выполнения основных операций над данными;

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

К недостаткам сетевой модели представления данных относятся:

1)высокая сложность и жесткость схемы базы данных, которая построена на ее основе;

2)трудность для понимания и выполнения обработки информации в базе данных непрофессиональным пользователем.

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

Реляционная модель представления данных была разработана сотрудником фирмы 1ВМЭ. Коддом. Его модель основывается на понятии «отношения» (relation). Простейшим примером отношения служит двумерная таблица.

Достоинствами реляционной модели представления данных (по сравнению с иерархической и сетевой моделями) являются ее понятность, простота и удобство практической реализации реляционных баз данных на ЭВМ.

К недостаткам реляционной модели представления данных относятся:

1)отсутствие стандартных средств идентификации отдельных записей;

2)сложность описания иерархических и сетевых связей.

Большинство СУБД, применяемых как профессиональными, так и непрофессиональными пользователями, построены на основе реляционной модели данных (Visual FoxPro и Access

фирмыMicrosoft, Oracle фирмы Oracle и др.).

2.2.История развития и стандарты языка SQL. Наборы команд SQL и примеры операторов. Типы данных, управляющие конструкции языка Transact-SQL.

История развития и стандарты.

SQL (Structured Query Language, структурированный язык запросов) –

универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. 1986 – первый вариант стандарта, принятый институтом ANSI и одобренный ISO в 1987г.

1992 – стандарт SQL 92 или SQL 2.

1999 – стандарт SQL 3. Добавлена поддержка регулярных выражений, рекурсивных запросов, поддержка триггеров, базовые процедурные расширения, нескалярные типы данных и некоторые объектноориентированные возможности.

2003 – SQL:2003. Введены расширения для работы с XML-данными, оконные функции, генераторы последовательностей и основанные на них типы данных.

2006 – SQL:2006. Функциональность работы с XML-данными значительно расширена. Появилась возможность совместно использовать в запросах SQL и XQuery.

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

"+" Независимость от конкретной СУБД, наличие стандартов (поддержка совместимости), декларативность (пользователь производит только описание данных).

"–" Несоответствие реляционной модели данных, сложность, отступления от стандартов, сложность работы с иерархическими структурами

Наборы команд SQL.

Подмножества команд SQL (перечислены не все):

1) DDL – Data Definition Language – язык определения данных . CREATE TABLE - Создание новой таблицы в базе данных DROP TABLE - Удаление таблицы из базы

ALTER TABLE - Изменение структуры таблицы или ограничения целостности таблицы

CREATE VIEW - Создание представления (виртуальной таблицы на основе запроса)

ALTER VIEW - Изменение структуры представления DROP VIEW - Удаление представления

CREATE INDEX - Создание индекса (таблицы быстрого доступа к данным)

DROP INDEX - Удаление индекса

2)DMP – Data Manipulation Language – язык манипулирования данными.

DELETE - Удаление строк из таблицы INSERT - Вставка строк в таблицу

UPDATE - Обновление значений полей в таблице

3)DQL – Data Query Language – язык запросов.

SELECT - Выборка строк из таблицы

4)TCS – Transactional Control Statement – cредства управления транзакциями.

COMMIT - Завершить транзакцию ROLLBACK - Отменить транзакцию

SAVEPOINT - Сохранить промежуточную точку выполнения транзакции

5)Средства администрирования данных.

CREATE DATABASE - Создать новую базу данных DROP DATABASE - Удалить базу данных

ALTER DATABASE - Изменить свойства и объекты базы данных GRANT - Предоставить права доступа к объектам базы данных REVOKE - Лишить прав доступа к объектам базы данных.

Transact-SQL

Версия языка SQL, используемого SQL Server, называется TransactSQL, или T-SQL, в память о том, что в именно этом в диалекте SQL появились операторы управления транзакциями. Дополнительно T- SQL позволяет указывать оптимизатору запросов порядок выполнения операций и используемые индексы. Типы данных,

управляющие конструкции языка и функции Transact - SQL . Типы данных и преобразование типов.

Встроенные и определённые пользователем типы данных хранятся в текущей базе данных в таблице systypes и могут быть просмотрены командой

SELECT * FROM systypes

1.Бинарные: требуется указывать числа в 16-ричном виде, например 0х FF .

binary ( n ) – n определяет количество байт для хранения (до 8000 байт); под каждое значение будет выделено указанное количество байт вне зависимости от фактических размеров данных. varbinary ( n ) – n определяет максимальное количество байт для

хранения (до 8000 байт); если массив данных m < n , то фактически отводится m +4 байта, если m > n , то данные усекаются до размера поля.

image – хранятся бинарные данные размером до 2 31 -1 байт (~2 Гбайт), память выделяется страницами по 8000 байт. Использование этого поля оправдано, если требуется хранить очень длинные данные. Пример:

DECLARE @ VA binary (10), @ VB varbinary (10) SELECT @ VA = 0 xFF , @ VB = 0 xAC

SELECT 'Значение переменной VA : ' = @ VA , 'Значение переменной

VB : ' = @ VB

SELECT 'Длина VA : ' = DATALENGTH (@ VA ), 'Длина VB : ' =

DATALENGTH (@ VB )

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

char ( n ) – n <=8000, ASCII символы (1 байт), резервируется всегда n символов, если размер данных меньше, строка дополняется пробелами справа.

varchar ( n ) – то же что и char ( n ), но резервируется максимум n символов. Если размер данных m < n , то дополнения пробелами не происходит.

nchar ( n ) – n <=4000, Unicode символы (2 байта), остальное как в char ( n ).

nvarchar ( n ) – n <=4000, Unicode символы (2 байта), остальное как в varchar ( n ).

Примеры:

DECLARE @ name nvarchar (25)

SET @ name = N 'Д''Артаньян'

SELECT @ name

-- Что получится в каждом из столбцов?

SELECT 1+1,'1'+'1','1'+'2'+3

Типичные функции для работы со строками: LEN (…) – возвращает длину строки в символах;

LTRIM (…) и RTRIM (…) – удаляет пробелы в начале и в конце строки SUBSTRING (…) – возвращает подстроку из строки

REPLACE (…) – заменяет подстроку указанным значением

3.Текстовые: позволяют хранить достаточно большие объёмы текстовой информации

text – хранение ASCII текстовых блоков размером <=2 31 -1 символов (~2 Гбайт), выделяемых постранично.

ntext – хранение Unicode текстовых блоков размером <=2 30 -1 символов (~1 Гбайт), выделяемых постранично.

Некоторые функции для работы с текстовыми полями: SUBSTRING (…) – возвращает подстроку текстового поля; READTEXT (…) – считывает данные из текстового поля; DATALENGTH (…) – возвращает количество байт, занимаемых данными;

4.Целочисленные: следует учитывать, что результат вычисления выражения приводится к типу данных, имеющих максимальный размер из всех участвующих в выражении. Результатом деления целого на целое будет целое с отброшенной дробной частью.

tinyint – диапазон данных от 0 до 255 (длина поля 1 байт).

smallint – диапазон данных от -2 15 до 2 15 -1 (длина поля 2 байта). int или integer – диапазон данных от -2 31 до 2 31 -1 (длина поля 4 байта).

bigint – диапазон данных от -2 63 до 2 63 -1 (длина поля 8 байт).

5.Нецелочисленные: с фиксированной и плавающей

точкой.

dec или decimal [( p [, s ])] или numeric [( p [, s ])] – диапазон от –

(10^38 -1) до (10^38 -1). Содержит фиксированное количество знаков до и после точки: p – общее число знаков, s – число знаков после точки (0 <= s <= p <= 38). Длина поля от 5 до 17 байт.

float [( n )] – число в виде мантиссы и порядка. Максимальный диапазон от -1.79 308 до 1.79 308 . Значение n определяет количество бит, используемых для хранения мантиссы ( n <=53). Длина поля 4 или 8 байт.

double precision – частный случай float (53).

real – частный случай float (24). Диапазон данных от -3.4 38 до 3.4 38 . Примеры:

DECLARE @VR real SET @VR=1.23E4

SELECT @VR, DATALENGTH(@VR)

Не рекомендуется указ. нецелочисленные типы данных в

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

DECLARE @VR float, @VS varchar(20) SET @VR=3.14

SET @VS=STR(@VR,4,2)+'15' – простая функция преобразования типов

SELECT @VS

SET @VS=CAST($123.45 AS varchar(10)) – универсальная функция преобразования

SELECT @VS

SELECT CAST ('$54321' AS money)

Взаимозаменяемой для функции CAST является функция CONVERT. Некоторые функции для работы с числовыми типами: ISNUMERIC

(…) – проверяет, имеет ли выражение числовой тип данных (1, если да); RAND () – вычисляет случайное число с плавающей точкой в диапазоне [0…1]; POWER (…) – возведение числа в степень ( SELECT power(2,8) ); PI (…) – возвращает значение Пи.

7.Даты и времени: типы данных позволяют одновременно хранить время и дату.

datetime – В первых 4 байтах хранится смещение относительно 1 января 1753 г. (до этого летоисчисление шло по Григорианскому и Юлианскому календарям) до 31.12.9999. Последние 4 байта – время после полуночи с точн. 3.33 мс.

smalldatetime – диапазон от 1.01.1900 до 6.06.2079 с точностью до 1 мин.

Дополнительные возможности для ввода и вывода дат предоставляет команда

SET DATEFORMAT xxx , где xxx может быть: mdy , dmy , ymd , ydm , myd , dym .

Примеры:

SET LANGUAGE 'русский'

DECLARE @ DV datetime

SET @ DV ='21 октябрь 2003 23:19'

SELECT @ DV

Функция ISDATE (<выражение>) возвращает 1, если <выражение> может быть правильно конвертировано в дату, и 0 в противном случае. Некоторые функции для работы с датой и временем: GETDATE () – возвращает текущее системное время; YEAR (…) – возвращает год из указанной даты; DATEADD (…) – добавляет к дате указанный временной интервал

SELECT year(getdate()) DECLARE @Str1 char(10)

IF DAY ( GETDATE ())<15 SET @ Str 1='первая' ELSE SET @Str1='вторая'

SELECT 'Сейчас '+RTRIM(@Str1)+' половина месяца'

8.Денежные: поддерживается точность 4 знака после

десятичной точки.

money – диапазон от -922 337 203 685 477.5808 до +922 337 203 685 477.5807, длина 8 байт.

smallmoney – диапазон от -214 748.3648 до +214 748.3647, длина 4

байта. Примеры :

CREATE TABLE MyMoney (

ID bigint IDENTITY (1,1) PRIMARY KEY, Value money NULL ) INSERT MyMoney VALUES ($127.35)

SELECT * FROM MyMoney

Специальные :

bit – данные принимают значения 0 / 1 / NULL. Память выделяется побайтно.

timestamp – счетчик-идентификатор записей, уникальный в пределах одной базы данных (не имеет ничего общего с меткой времени). Длина 8 байт. Не может использоваться для объявления переменных. Не должен использоваться в составе первичного ключа. uniqueidentifier – глобально уникальный идентификатор записи ( GUID ). Идентификатор уникален в масштабе планеты. Представляет собой 16-байтовую последовательность, составляющуюся с помощью функции NEWID () из MAC -адреса сетевой карты и внутреннего таймера процессора.

sysname – предназначен для хранения имён объектов баз данных SQL Server – столбцов, таблиц, индексов, представлений, хранимых процедур и др.

sql _ variant – позволяет в одном и том же столбце хранить значения любого другого доступного типа данных (за исключением text , ntext , image , timestamp , cursor , table и самого sql _ variant )

Пример:

DECLARE @Var1 int, @Var2 nvarchar(15), @Var3 datetime, @VA sql_variant

SET @Var1=10

SET @Var2='Просто строка'

SET @Var3='23.08.1969' SET @VA=@Var1+5 SELECT @VA

SET @VA=@Var2 SELECT @VA SET @VA=@Var3 SELECT @VA

Функция SQL _ VARIANT _ PROPERTY возвращает информ-ю о природе данных, хранящихся под типом sql _ variant .

cursor – ссылка на объект базы данных – курсор. Подробнее о курсорах см. далее.

table – временная таблица (массив). Может использоваться только для переменных и значений, возвращаемых функциями пользователя.

Пример : DECLARE @VarTable TABLE

( Col1 int NOT NULL IDENTITY (1,1) PRIMARY KEY, Col2 nvarchar(15) )

INSERT INTO @VarTable (Col2) VALUES (' Первая строка ') SELECT * FROM @VarTable

1. Пользовательские типы данных: также возможно создавать в MS SQL Server . Для этих целей предусмотрена специальная хранимая процедура sp _ addtype . Первым параметром при вызове этой процедуры указывается имя пользовательского типа, вторым – имя системного типа, на основе которого строится пользовательский. Третий параметр указывает, разрешены или запрещены значения NULL .

Пример: sp_addtype nvc15, 'nvarchar(15)', NONULL

Управляющие конструкции Transact - SQL

Их весьма мало. К ним относятся:

Блок BEGIN … END . Выполняет группировку двух и более TSQL команд. Используется в конструкциях ветвлений, условий и циклов. Допускаются вложенные друг в друга блоки.

Конструкция IF … ELSE . Переход по условию. Допускается в каждой ветви исполнять одну команду или использовать блок BEGIN … END .

Пример:

PRINT GetDate()

IF Day(GetDate())=1 AND Month(GetDate())=1 BEGIN

PRINT 'Сегодня Новый Год!'

IF CURRENT_USER='dbo'

PRINT 'Администратор СУБД - это судьба...'

END

ELSE PRINT 'Сегодня точно не Новый Год.'

Конструкция CASE … END . Реализует множественное ветвление. Особенностью конструкции является то, что её можно использовать непосредственно в выражениях, например, при выполнении запроса. Пример:

SELECT au_lname, au_fname, CASE state

WHEN ‘CA' THEN ‘ Калифорния ' WHEN ‘UT' THEN ‘ Юта '

ELSE state END

FROM authors

WHERE au_lname LIKE 'O%'

Конструкция COALESCE возвращает первое значение, не равное NULL , из перечня аргументов функции.

Пример:

DECLARE @I1 int, @C1 char, @C2 char, @C3 char SET @I1 = 10

SET @C1 = 'A'

SET @C2 = @C1 + @C3 PRINT COALESCE(@C2,@I1)

Так как конкатенацией любой строки со значением NULL является NULL , то результатом выполнения этой последовательности команд будет значение 10 .

Конструкция WHILE … . Организует циклы в TSQL . Это единственный способ организовать циклы в этом языке. Цикл можно принудительно остановить, если в его теле выполнить команду BREAK , и перезапустить из любого места внутри тела цикла с помощью команды CONTINUE .

DECLARE @I1 int SET @I1 = 1 WHILE @I1 < 8 BEGIN

PRINT ' Квадрат числа '+Str(@I1)+' есть '+Str(Square(@I1)) SET @I1 = @I1 + 1 END

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

Оператор SELECT .

Весь запрос SELECT разбивается на отдельные разделы, каждый из которых имеет своё назначение. Упрощённый вариант синтаксиса оператора SELECT:

1 SELECT [ALL | DISTINCT] < список вывода >

2[ INTO <имя новой таблицы> ]

3FROM <список таблиц и условий соединения>

4[ WHERE <условие отбора или соединения> ]

5[ GROUP BY <список полей группировки> ]

6[ HAVING <условия, накладываемые на группу> ]

7[ ORDER BY <список полей для сортировки вывода> ]

8[ UNION <запрос на выборку для объединения>]…

<список вывода>::= { * |

[<имя таблицы> | <алиас>.] {<имя столбца> | <выражение>} [AS <алиас>] |

<имя столбца> = <выражение>} […n]

Символ звёздочка означает, что в результирующий набор включаются все столбцы из указанных исходных таблиц: SELECT * FROM publishers

Декартово произведение отношений: SELECT * FROM publishers, authors

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

SELECT ALL p.country FROM publishers AS p

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

SELECT DISTINCT state, contract FROM authors

Простейшие вычисления в разделе SELECT:

SELECT ' Название книги : ', title, yearpub-1992 FROM titles WHERE yearpub > 1992;

Раздел WHERE предназначен для наложения горизонтальных фильтров на данные, обрабатываемые запросом. Для этого указывается логическое условие, от результата вычисления которого зависит, будет ли строка включена в результат выборки или нет.

SELECT au_lname, au_fname, state FROM authors WHERE state<>'CA'

Предикаты, используемые в условных конструкциях SQL :

1)Предикаты сравнения: = , <> , < , > , >= , <= ; SELECT * FROM authors WHERE 1=1

2)AND – соединение нескольких логических выражений;

SELECT title FROM titles WHERE yearpub>=1995 AND yearpub<=1997

3)OR – если одно из двух условий истинно, то результат True ;

SELECT title FROM titles WHERE yearpub<1995 OR yearpub>1997

4)NOT – отрицание, может ставиться непосредственно перед нижеследующими предикатами;

5)Предикат диапазона: Between A and B – принимает значение True, если сравниваемое значение лежит между A и В;

SELECT title FROM titles WHERE yearpub NOT BETWEEN 1995 AND 1997

6)Вхождение во множество: IN (<список значений>) – принимает True, если сравниваемое значение входит во множество заданных значений;

SELECT title FROM titles WHERE yearpub IN (1995, 1996, 1997)

7)Сравнение с образцом: LIKE. В шаблон могут входить специальные символы «_» – для обозначения любого одиночного символа, и « % » – для обозначения произвольной последовательности символов;

SELECT publisher, url FROM publishers WHERE publisher LIKE

‘%Wiley%'

8)Предикат сравнения с неопределённым значением: IS NULL .

SELECT publisher, “url not defined !” FROM publishers WHERE url IS

NULL

Связь между таблицами с использованием раздела WHERE (стандарт

SQL 89)

Представим ситуацию, когда выборку данных надо производить из отношения, которое является результатом слияния нескольких отношений. При отсутствии соединения в разделе WHERE результат будет эквивалентен расширенному декартовому произведению отношений. Обычно всегда в случае использования нескольких таблиц имени поля предшествует имя таблицы во всех разделах оператора SELECT .

SELECT titles.title, titles.yearpub, publishers.publisher FROM titles, publishers

WHERE titles.pub_id = publishers.pub_id AND titles.yearpub>1996

В данном запросе в разделе WHERE указаны условия связи и условия фильтрации данных. Связь между таблицами с использованием раздела FROM (стандарт SQL 2, внешние объединения).

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

1.[INNER] JOIN . Данный тип связи используется по умолчанию. Строки левой таблицы, для которых не имеется пары в правой таблице, в результат выборки не включаются. Строки правой таблицы, для которых не имеется пары в левой таблице, также в результат не включаются.

2.LEFT [ OUTER ] JOIN . Все строки левой таблицы включаются в результат выборки. При этом, если отсутствуют строки в правой таблице, то в соответствующих столбцах правой таблицы, включенных в результат запроса, будет установлено значение NULL . Строки правой таблицы, для которых не имеется пары в левой таблице, в результат не включаются.

3.RIGHT [ OUTER ] JOIN . Все строки правой таблицы включаются в результат выборки. Для соответствующих столбцов левой таблицы, включенных в запрос, устанавливается значение NULL . Строки левой таблицы, для которых не имеется пары в левой таблице, в результат не включаются.

4.FULL [ OUTER ] JOIN . В результат будут включены все строки как левой, так и правой таблицы.

5.CROSS JOIN – выражение эквивалентно просто запятой между таблицами.

Пример связи двух таблиц:

SELECT authors.au_lname, authors.au_fname, titleauthor.royalty FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id

WHERE authors.state='CA'

Раздел GROUP BY позволяет выполнять группировку строк таблиц по определённым критериям. Типичным примером использования GROUP BY является суммирование однотипных значений. GROUP BY почти всегда используется вместе с функциями агрегирования. GROUP BY разделяет таблицу на группы, а функция агрегирования вычисляет для каждой из них итоговое значение.

Основные функции агрегирования:

AVG(<поле>) Среднее значение для указанного столбца или выражения

COUNT(<поле>) Количество строк, исключая NULL-строки в указанном столбце

COUNT(*) Общее количество строк, включая NULL-строки MAX(<поле>) Максимальное значение в указанном столбце MIN(<поле>) Минимальное значение в указанном столбце SUM(<поле>) Сумма всех значений в указанном столбце STDEV(<поле>) Статистическое стандартное отклонение для значений столбца

VAR(<поле>) Несмещенная оценка дисперсии величин указанного столбца Следующий запрос определяет количество книг каждого

издательства, зарегистрированных в базе данных:

SELECT publishers.publisher, COUNT(titles.title) FROM titles, publishers

WHERE titles.pub_id = publishers.pub_id GROUP BY publisher

Правила использования группировок в запросах:

1) Функции агрегирования не работают со значениями NULL .

2) В разделе SELECT можно указывать только те поля, по которым осуществляется группировка. Чтобы вывести значения столбцов, не указанных в критериях группировки, необходимо применять к ним функции агрегирования.

3) Раздел WHERE не допускает использования функций агрегирования.

Пример: подсчитать, сколько записей ввёл каждый из операторов по каждому региону за 2003 год.

SELECT max(subjects.name_rus) as [ субъект ], COUNT(*) AS [

количество записей ], max(users.u_name) as [ оператор ] FROM subjects, data, users

WHERE data.subject = subjects.subject and data.id_user = users.id_user and data.year=2003

GROUP BY data.subject, data.id_user

ORDER BY [ субъект ]

Простой запрос, использующий функцию агрегирования без группировки:

SELECT Count(*) FROM data

Раздел HAVING. Этот раздел практически аналогичен по назначению с разделом WHERE (горизонтальная фильтрация), однако используется для задания условий групповой фильтрации. В этом разделе допускается использование функций агрегирования. Определим количество книг каждого издательства, исключая случаи единственного экземпляра.

SELECT publishers.publisher, COUNT(titles.title) FROM titles, publishers

WHERE titles.pub_id = publishers.pub_id GROUP BY publisher

HAVING COUNT (*)>1;

Др. пример: получить номера деталей, суммарное количество которых на складе превышает 400 шт.

SELECT number, SUM(volume) FROM warehouse GROUP BY number HAVING SUM(volume)>400

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

SELECT data.* FROM data ORDER BY subject, msu, year

Раздел UNION служит для объединения результатов выборки, возвращаемых двумя и более запросами. Это может быть выборка из одной таблицы или слияние данных из множества таблиц. Иными словами, раздел UNION вставляется между двумя запросами, возвращающими одинаковый набор столбцов. В результат будут включены строки, как первого, так и второго запроса. По умолчанию дублирующие строки в результат не включаются.

SELECT publisher, url FROM publishers UNION

SELECT site , url FROM wwwsites

Использование вложенных запросов. Команда SELECT позволяет использовать подзапросы в предикатах главного (т.е. в разделах WHERE и HAVING ). Совместно с подзапросом можно использовать предикат EXIST, который возвращает истину, если вывод подзапроса не пуст. Задача: найти названия всех изданий, выпущенные издательством « Wiley » SELECT title FROM titles WHERE pub_id IN

(SELECT pub_id FROM publishers WHERE publisher='Wiley');

Более сложные задачи: даны отношения

Supplier s ( id _ supplier , name ) – поставщики (код поставщика, ФИО поставщика)

Supply ( id _ supplier , number ) – поставки (код поставщика, номер детали)

Components ( number , title ) – детали (номер детали, наименование детали).

Получить список поставщиков, поставляющих деталь с номером 222.

SELECT * FROM suppliers WHERE EXIST

(SELECT * FROM supply

WHERE suppliers.id_supplier = supply.id_supplier AND supply.number = 222);

Такие подзапросы называются коррелируемыми (correlated ). Внешняя ссылка может принимать различные значения для каждой строки-кандидата, оцениваемого с помощью подзапроса, поэтому подзапрос должен выполняться заново для каждой строки, отбираемой в основном запросе.

Простой пример: контроль ссылочной целостности вручную: SELECT * FROM data WHERE item NOT IN (SELECT item FROM items)

Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL ). Для того, чтобы показать, что язык SQL является реляционно полным, нужно показать, что любой реляционный оператор может быть выражен средствами SQL.

 

 

 

 

1 . Объединение

2. Пересечение

3 . Разность :

4. Декартово

:

:

SELECT *

произведение:

SELECT *

SELECT *

FROM A

SELECT A .*, B .*

FROM A

FROM A

EXCEPT

FROM A , B

UNION

INTERSECT

SELECT *

 

SELECT *

SELECT *

FROM B

 

FROM B

FROM B

 

 

 

 

 

 

5. Ограничение

6. Проекция

7. Соединение

8. Деление :

:

отношения :

по условию:

SELECT

SELECT *

SELECT

SELECT A .*,

DISTINCT A.X

FROM A

DISTINCT X,

B .* FROM A ,

FROM A

WHERE С ;

Y, Z FROM A

B WHERE С;

WHERE NOT

 

 

 

EXIST (SELECT

 

 

 

* FROM B

 

 

 

WHERE NOT

 

 

 

EXIST (SELECT

 

 

 

* FROM A A1

 

 

 

WHERE A1.X =

 

 

 

A.X AND A1.Y =

 

 

 

B.Y));

 

 

 

 

2.4. Понятия таблиц, представлений и индексов. Создание, модификация и удаление таблиц, представлений и индексов средствами SQL. Операторы манипулирования данными

(INSERT, UPDATE, DELETE). Примеры использования.

Создание, удаление и модификация таблиц.

Создание таблицы: CREATE TABLE <имя_таблицы>

(<имя_столбца> {<тип_данных> | AS <выражение>}

{[ DEFAULT <значение>] | [ IDENTITY [(начальное значение,

инкремент)]]}

{[NULL | NOT NULL] | [UNIQUE | PRIMARY KEY]}

[ REFERENCES <имя главной таблицы> [(<имя столбца>)]] , ...)

Имя таблицы должно быть уникальным в пределах БД, а имена столбцов – уникальными в пределах таблицы. Наиболее часто используется повторяющаяся конструкция <имя столбца> <значение>: NULL указывает на то, в этом столбце возможны неопределённые значения (естественно, такой столбец не может быть ключевым).

UNIQUE (ограничение целостности) указывает, что каждое значение в столбце является уникальным в пределах этого столбца. Для такого ограничения целостности автоматически создаётся индекс.

PRIMARY KEY – создаётся первичный ключ на базе соответствующего столбца. Для таблицы может быть создано только одно такое ограничение целостности.

DEFAULT – указывается значение по умолчанию для данного столбца.

IDENTITY – создаётся столбец-счётчик. Только один столбец может быть счётчиком.

REFERENCES – определяет, что столбец будет служить внешним ключом для таблицы, указанной с помощью параметра <имя главной таблицы>. Столбцы, входящие во внешний ключ, могут ссылаться только на столбцы первичного ключевого ограничения или ограничения UNIQUE . Дополнительно ограничение может быть уточнено ключевыми словами ON DELETE { CASCADE | NO

ACTION } ON UPDATE { CASCADE | NO ACTION }

Примеры создания таблиц (работа с которыми была рассмотрена выше):

CREATE TABLE authors (au_id INT PRIMARY KEY, author CHAR(25) NOT NULL);

CREATE TABLE publishers (pub_id INT PRIMARY KEY, publisher

VARCHAR(255) NOT NULL, url VARCHAR(255) DEFAULT ‘

неизвестен ');

CREATE TABLE titles (title_id INT NOT NULL PRIMARY KEY, title CHAR(255) NOT NULL, yearpub INT, pub_id INT REFERENCES publishers(pub_id);

Создание таблицы с вычисляемыми полями:

CREATE TABLE MyTable (FirstCol int, SecondCol int, ThirdCol AS (FirstCol+SecondCol)/2.0)

Удаление таблицы: DROP TABLE <имя_таблицы>

Модификация таблицы: Команда ALTER TABLE берёт на себя все действия по копированию данных во временную таблицу, удалению старой таблицы, созданию вместо неё новой таблицы с нужной структурой и последующим переписыванием в неё данных. Все эти действия происходят без участия пользователя, при этом установленные права доступа к таблице сохраняются.

Добавление столбцов: ALTER TABLE <имя_таблицы> ADD

(< возможное содержание аналогично содержимому в скобках для команды CREATE TABLE > ,...)

Удаление столбцов: ALTER TABLE <имя_таблицы> DROP (<имя столбца>, …)

Модификация столбцов: ALTER TABLE <имя_таблицы> MODIFY

(< возможное содержание аналогично содержимому в скобках для команды CREATE TABLE > ,...)

Пример : ALTER TABLE MyTable ADD DateCol datetime DEFAULT GETDATE() NOT NULL UNIQUE

Представления (Views) :

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

Представление может быть использовано: (1) для защиты конфиденциальной информации; (2) для упрощения доступа к информации и (3) сокращения времени доступа. Для таких целей представление может быть проиндексировано.

«+»: представление может выбирать данные (1) из таблиц текущей и любой другой базы данных, (2) из представлений текущей и любой другой базы данных (в том числе расположенные на разных серверах). «--»: (1) представление не может ссылаться на временные таблицы, и невозможно создать временные представления; (2) в запросе, определяющим представление, нельзя использовать разделы ORDER BY и INTO ; (3) имеется ряд ограничений на изменение, добавление и удаление данных в представлении, созданном для нескольких таблиц. Команды T-SQL , используемые для работы с представлениями:

CREATE VIEW <имя представления> AS < SELECT -запрос> –

создание представления.

CREATE VIEW My_view AS SELECT au_lname, au_fname, address FROM authors WHERE state='CA'

ALTER VIEW <имя представления> AS < SELECT -запрос> – изменение представления.

DROP VIEW <имя представления>, …– удаление представлений (одного или нескольких)

Хранимая процедура sp _ help возвращает информацию о различных параметрах представления, в качестве единственного аргумента которой указывается имя представления. Эта же процедура возвращает и об объектах других типов – таблицах, триггерах, индексах, хранимых процедурах и др.

Создание, удаление и модификация индексов.

Когда в БД хранится большое количество информации, объём которой начинает исчисляться десятками тысяч записей, обычные подходы к поиску нужных данных, такие как полное сканирование таблиц, становятся неприемлемыми. Время, которое пришлось бы затратить на анализ всей таблицы, оказывается слишком велико. Индекс представляет собой средство, помогающее ускорить поиск необходимых данных за счет физического или логического их упорядочения. Физически индекс представляет собой специальным образом упорядоченный набор значений из индексированного столбца с указателями на места физического размещения исходных записей в структуре базы данных.

К настоящему времени разработаны эффективные математические алгоритмы поиска данных в упорядоченной последовательности. Одним из таких алгоритмов является метод половинного деления. В простейшем варианте для поиска любого значения берётся начальное приближение в середине упорядоченной последовательности значений, и хранимая в ней величина сравнивается с искомым значением. Если искомая величина меньше выбранного значения, то дальнейшему делению пополам подвергается первая половина списка, иначе – вторая. Поиск заканчивается, как только достигнуто совпадение искомой величины и анализируемого значения.

Основным недостатком использования индексов является замедление процесса обновления (в том числе добавления и удаления) данных, так как для обеспечения целостности данных после ввода новых записей необходимо переиндексировать таблицу. Очень часто встает вопрос, какие поля необходимо индексировать. Обязательно надо строить индексы для первичных ключей, поскольку по их значениям осуществляется доступ к данным при операциях соединения двух и более таблиц.

Создание индекса:

CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы> (<имя_столбца>,...)

Пример: CREATE INDEX au_index ON authors (au_id); CREATE INDEX title_index ON titles (title_id);

Удаление индекса:

DROP INDEX <имя_индекса>

Операторы манипулирования данными -- операторы добавления, изменения и удаления записей.

INSERT – добавление информации к таблице

INSERT INTO <имя_таблицы> [ (<имя_столбца>,...) ] VALUES { 1. [ (<значение>,..) ]

2.|[ < SELECT -запрос> ]

3.|[ DEFAULT VALUES ] }

Синтаксис строки 1 позволяет ввести только одну строку в таблицу. Если вводятся все поля записи, то список столбцов можно не задавать. Вместо значения поля можно указывать DEFAULT . Оператор ввода данных с помощью синтаксиса строки 2 позволяет ввести сразу множество строк, если их можно выбрать из некоторой другой таблицы. При этом порядок следования столбцов и тип данных в столбцах должных совпадать. Строка 3 используется, если создаётся запись с значениями по умолчанию.

Примеры: INSERT INTO publishers VALUES (16," Microsoft Press "," http :// www . microsoft . com ");

INSERT INTO Authors (au_id, au_lname, au_fname) VALUES (666,'Бездомный','Иван')

INSERT INTO Addresses (name, phone, address) VALUES ( SELECT name, phone, address FROM tmp_table)

UPDATE – обновление информации в таблице

UPDATE <имя_таблицы> SET <имя_столбца> = <значение>,...

[ FROM {<имя таблицы> | < SELECT -запрос>},…] [ WHERE <условие>]

За один вызов UPDATE можно изменить данные в одном или нескольких столбцах для одной или множества записей только в одной таблице. С ключевого слова SET начинается блок, в котором определяется список изменяемых столбцов. Синтаксис <значение>:=={<константа> | <переменная> | <выражение> | DEFAULT | NULL }. Изменению подвергаются все строки, удовлетворяющие критериям ограничения области действия запроса UPDATE , которые задаются с помощью раздела WHERE .

UPDATE Authors SET address = “ Садовая 13 А , кв . 50” WHERE au_lname = ” Берлиоз ” AND au_fname = ” Михаил ”

UPDATE publishers SET url=" сайт неизвестен " WHERE url IS NULL

Если в инструкции UPDATE будет пропущен раздел WHERE , то заданные в разделе SET изменения будут сделаны в каждой строке таблицы. Имеет смысл для проверки сначала выполнить инструкцию типа SELECT Count (*) с тем же критерием WHERE , чтобы узнать, сколько строк будет изменено с помощью UPDATE . При составлении выражения можно ссылаться на любые столбцы таблицы, включая изменяемые.

UPDATE Titles SET price=price+10

Если при изменении данных в таблице необходимо учесть состояние данных в других таблицах, то они указываются в разделе FROM . После того как источник данных указан в разделе FROM , в разделах WHERE и SET можно ссылаться на столбцы этого источника данных. Пример: в таблице subjects ( subject , fo , name ) в поле fo указан номер федерального округа, к которому принадлежит данный субъект федерации. В частично заполненной таблице peoples ( xsubject , xfo , value ) осталось незаполненным поле xfo с тем же смыслом. Как восстановить недостающую информацию ?

UPDATE Peoples SET xfo = fo FROM subjects WHERE xsubject=subject

DELETE – удаление информации из таблицы

DELETE FROM <имя_таблицы> [ WHERE <условие> ]

С помощью DELETE можно удалить как отдельные строки, так и множество строк. Без WHERE будут удалены все строки таблицы. В разделе WHERE также можно использовать вложенные подзапросы.

DELETE FROM publishers WHERE publisher = "Microsoft Press"

Удалить из таблицы students студентов, имеющих две и более двойки по результатам экзаменов (если это позволяют ограничения целостности):

DELETE FROM students WHERE id_student IN (

SELECT id_student FROM testing WHERE result=2 GROUP BY id_student HAVING count(*)>2 ).

2.5. Элементы Microsoft SQL Server: представления, хранимые процедуры, пользовательские функции, ограничения, триггеры – примеры создания, использования и удаления средствами языка. Использование временных таблиц.

Представления (Views):

Представление для пользователей базы данных выглядит как таблица, однако на самом деле его содержимое формируется запросом. Физически данные, виртуально принадлежащие представлению, находятся в таблицах, к которым обращается этот запрос. Однако для клиентов MS SQL Server запросы на выборку данных из представления выполняются как для полноценной таблицы. Представление может быть использовано: (1) для защиты конфиденциальной информации; (2) для упрощения доступа к информации и (3) сокращения времени доступа. Для таких целей представление может быть проиндексировано.

Достоинства: представление может выбирать данные (1) из таблиц текущей и любой другой базы данных, (2) из представлений текущей и любой другой базы данных (в том числе расположенные на разных серверах).

Недостатки: (1) представление не может ссылаться на временные таблицы, и невозможно создать временные представления; (2) в запросе, определяющим представление, нельзя использовать разделы ORDER BY и INTO; (3) имеется ряд ограничений на изменение, добавление и удаление данных в представлении, созданном для нескольких таблиц.

Команды TSQL, используемые для работы с представлениями: CREATE VIEW <имя представления> AS <SELECT-запрос> –

создание представления.

CREATE VIEW My_view AS SELECT au_lname, au_fname, address FROM authors WHERE state=’CA’

ALTER VIEW <имя представления> AS <SELECT-запрос> –

изменение представления (может потребоваться, например, в случае, если нежелательно изменять права доступа к уже существовавшему представлению.

DROP VIEW <имя представления>, …– удаление представлений (одного или нескольких)

Хранимая процедура sp_help возвращает информацию о различных параметрах представления, в качестве единственного аргумента которой указывается имя представления. Эта же процедура возвращает и об объектах других типов – таблицах, триггерах, индексах, хранимых процедурах и др.

Хранимые процедуры (Stored Procedures): являются основным механизмом, с помощью которого регулируются вся работа с базами данных на сервере. Хранимая процедура – это именованный набор команд TSQL , хранящийся непосредственно на сервере и представляющий собой самостоятельный объект базы данных.

В состав MS SQL Server 2000 входит большое количество встроенных системных хранимых процедур. Все они имеют префикс sp _ и охватывают практически все аспекты управления и конфигурирования сервера, позволяя изменять значения в системных таблицах пользовательских и системных баз данных. Хранимые процедуры существуют независимо от таблиц или каких-либо других объектов баз данных. Хранимая процедура может быть вызвана клиентской программой, другой хранимой процедурой или триггером. Когда хранимая процедура выполняется первый раз, сервер создаёт план исполнения процедуры, выполняет её оптимизацию и компиляцию. В дальнейшем при повторном вызове процедуры используется уже сгенерированный план, что позволяет оптимизировать её время исполнения. Хранение процедур в том же месте, где они исполняются, позволяет уменьшить объём передаваемых по сети данных и повышает общую производительность системы. Обычно приложение-клиент в целях безопасности имеет доступ к данным только через аппарат хранимых процедур.

Создание хранимой процедуры: CREATE PROC [ EDURE ] <имя> [;<число>] [{@<переменная-параметр> <тип данных>} [ VARYING ] [= <значение по умолчанию>] [ OUTPUT ] ,…] [ WITH { RECOMPILE | ENCRIPTION }] AS <набор выполняемых SQL -инструкций> [ RETURN ] Здесь <число> – возможность указать идентификационный номер хранимой процедуры; OUTPUT – наличие этого ключевого слова будет означать, что соответствующий параметр предназначается для возвращения данных из хранимой процедуры (при этом параметр может быть использован и для передачи данных в хранимую процедуру); VARYING – ключевое слово, которое используется совместно с параметром OUTPUT , имеющим тип данных Cursor , которое определяет, что в качестве выходного параметра будет представлено результирующее множество; RECOMPILE – план выполнения процедуры создаётся при каждом её вызове. ENCRIPTION – выполняется кодирование хранимой процедуры при записи в системные таблицы. Для возврата из хранимой процедуры можно использовать команду RETURN . Запуск хранимой процедуры осуществляется указанием её имени и, если необходимо, со списком значений параметров. При вызове процедуры из тела другой процедуры используется следующий синтаксис: EXEC [ UTE ] <имя процедуры> {[[@<имя параметра> =] <значение> | @<имя переменной> [ OUTPUT ] | DEFAULT ],…}.

Пример пакета : -- описываем хранимую процедуру

CREATE PROCEDURE MyProc

@lastname char(64), @firstname char(64) AS SELECT a.au_lname, a.au_fname, t.title FROM authors a, titles t, titleauthors ta

WHERE a.au_lname = @lastname AND a.au_fname = @firstname AND a.au_id = ta.au_id AND t.title_id = ta.title_id

--создаём хранимую процедуру

GO

--вызываем только что созданную хранимую процедуру MyProg 'Иван','Бездомный'

Выполнить созданную процедуру может только владелец базы данных, он же может изменить разрешение доступа и позволить другим пользователям работать с этой процедурой. Уровень вложенности хранимых процедур (вызовы одна из другой) – 32. Процедура как результат своей работы может возвратить (1) выборку из таблиц, (2) значения параметров, заданных как OUTPUT, (3) код завершения, который может генерироваться командой RETURN n . Просмотр кода процедуры выполняется с помощью системной процедуры sp _ helptext , а контрольную информацию о ней можно вывести с помощью процедуры sp _ help <имя процедуры>. Удаление

хранимой процедуры осуществляется командой DROP PROCEDURE <имя процедуры>, … Изменение имени хранимой процедуры осуществляется системной процедурой sp _ rename .

Для модификации хранимой процедуры используется команда ALTER PROCEDURE <имя процедуры>. Фактически эта команда аналогична CREATE PROCEDURE , только сделанные ранее административные разрешения сохраняются. Для редактирования хранимой процедуры лучше использовать средства, предоставляемые центром управления MS Access Enterprise Manager .

Триггеры (Triggers): Триггером в SQL Server называется специальная хранимая процедура, привязанная к конкретной таблице (представлению) и запускаемая сервером автоматически при обращении к этой таблице. Когда пользователь, например, успешно изменил данные в таблице, сервер автоматически запускает триггер, причём если произойдёт откат триггера, то это повлечёт и отмену пользовательских изменений данных.

Триггеры могут использоваться (1) для нестандартного контроля целостности данных, (2) для вычисления значений в полях таблицы по значениям других полей, (3) для ограничения действий различных групп пользователей. Существует три типа триггеров – соответственно для команд INSERT , UPDATE и DELETE . Внутри триггера допускается использование практически любых команд TSQL , включая вызовы хранимых процедур и обращение к функциям пользователя. Пример: триггер для таблицы authors , который будет запрещать вставку новых строк в таблицу, выдавая при этом сообщение «Вставка строк запрещена».

CREATE TRIGGER auth_tr ON authors FOR INSERT AS

PRINT ” Вставка строк запрещена ”

ROLLBACK TRAN

Пользовательские функции (User - defined functions): появились только в SQL Server 2000 и представляют собой развитие аппарата хранимых процедур, с возможностью их вызова непосредственно из выражений (как это принято для встроенных функций) и способных возвращать результат (в том числе как множество записей). В теле функций разрешается объявление локальных переменных, использование циклов, ветвлений и любых других программных конструкций, разрешается вызов других функций и хранимых процедур.

Функции не могут возвращать данные непосредственно клиенту, как это может делать хранимая процедура. То есть, не разрешается использование в теле функции команды PRINT , а также команды SELECT для непосредственного возвращения данных.

Пример создания и вызова функции вида inline (всегда возвращающей

RecordSet ):

CREATE FUNCTION MyFunc ( @State char(2) ) RETURNS TABLE AS

RETURN SELECT au_id, au_lname, au_fname FROM authors

WHERE state = @state GO

SELECT * FROM MyFunc('CA') ORDER BY au_lname, au_fname

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

Пример: создание правила, выполняющего проверку 15 <= x <= 75 :

CREATE RULE MyRule AS @exp BETWEEN 15 AND 75 -- свяжем это правило со столбцом price таблицы titles sp_bindrule MyRule 'titles.price'

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

Для освобождения столбца от правила используется хранимая процедура sp _ unbindrule <имя объекта> . Для удаления правила используется команда DROP RULE . Перед удалением правило должно быть освобождено от всех столбцов.

Умолчания (Default): Умолчание – механизм, задающий значение для столбца в случае, если оно не было определено при вставке строки. В качестве значения по умолчанию может быть указана константа или значение, возвращаемое ф-ей. Подобно правилам, умолчания явл-ся самостоят-ми объектами БД.

Пример создания умолчания и связывания его со столбцом:

CREATE DEFAULT MyDef AS ' неизвестно ' sp_bindefault MyDef 'titles.title'

Тип данных значения по умолчанию должен совп. с типом данных столбца или должно быть возможным неявное преобразование значение к типу данных столбца. Для освобождения столбца от умолчания исп-ся хранимая процедура sp _ unbindefault <имя объекта> . Для удал. умолч. исп-ся команда DROP DEFAULT .

Временные таблицы (Temporary tables): бывают локальные и глобальные. Названия локальных таблиц следует начинать с символа #. Такие таблицы существуют до тех пор, пока действует соединение с SQL Server , в котором эти таблицы были созданы, и автоматически уничтожаются при закрытии соединения. Локальные таблицы видимы только для соединения, создавшего их. Названия глобальных таблиц начинаются с символов ##. Существуют эти таблицы так же, как и локальные, однако во время своего существования являются видимыми и из любого другого соединения с сервером. Имя глобальной таблицы должно быть уникальным для сервера.

Ограничения целостности (Constraints):

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

Частично ограничения целостности были рассмотрены ранее для команд CREATE TABLE и ALTER TABLE. В этих командах после (необязательного) ключевого слова CONSTRAINT для отдельного столбца или таблицы в целом могут идти следующие типы ограничений:

NULL | NOT NULL

PRIMARY KEY

UNIQUE

FOREIGN KEY … REFERENCES

ON DELETE

ON UPDATE

CHECK <логическое выражение> – контроль вводимых значений каким-либо логическим выражением.

Пример:

CREATE TABLE publichers (

pub_id int NOT NULL PRIMARY KEY, pub_name varchar(40) DEFAULT (’неизвестно’) CHECK (pub_id LIKE ’99[0-9][0-9]’)

)

2.6. Курсоры в Microsoft SQL Server: примеры создания,

использования и удаления.

Вполне может случиться, что ответом на простой запрос клиента будет выборка из сотен тысяч строк, что для большинства клиентов неудобоваримо. В таком случае решением проблемы взаимодействия с клиентами яв-ляется использование курсоров как универсального механизма обмена данными между сервером и клиентом. Курсоры работают с результирующим набором данных (результатом выполнения запроса), давая пользовате-лям дополнительные возможности по обработке данных:

•курсоры позволяют работать со строками таблицы посредством указания их порядкового номера в наборе данных;

•курсоры позволяют реализовать сложные операции изменения данных, например когда для изменения зна-чения столбца требуется многократно обращаться к значениям других столбцов.

Жизненный цикл курсора :

Создание курсора : DECLARE <имя курсора> [ INSENSITIVE ] [

SCROLL ] CURSOR FOR < SELECT -оператор> FOR { READ ONLY | UPDATE }

Здесь ключевое слово INSENSITIVE означает, что курсор будет статическим (слепок с данных), в то время как по умолчанию курсор создаётся динамическим (выборка осуществляется каждый раз при обращении к строке). Ключевое слово SCROLL означает, что курсор можно прокручивать в любом направлении, иначе курсор создаётся «последовательным».

Открытие курсора : OPEN [ GLOBAL ] <имя курсора>. Курсор,

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

Считывание данных : FETCH [[ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM ] [ GLOBAL ] <имя курсора> [

INTO @ variable _ name , …]. SQL Server 2000 позволяет считывать из курсора всего одну строку . Ключевое слово FIRST – возвратить первую строку курсора; LAST – последнюю строку курсора; NEXT – следующую строку за текущей, возвращённая строка становится текущей; PRIOR – предыдущую перед текущей; ABSOLUTE n – возвращает строку по её абсолютному порядковому номеру в курсоре; RELATIVE – через n строк после текущей. Данные столбцов будут сохраняться в каждую из указанных переменных в порядке их перечисления.

Изменение данных : выполняет команда UPDATE с синтаксисом, предназначенным для работы с курсорами.

Удаление данных : выполняет команда DELETE с синтаксисом, предназначенным для работы с курсорами.

Закрытие курсора : CLOSE [ GLOBAL ] <имя курсора>

Освобождение курсора : DEALLOCATE [ GLOBAL ] <имя курсора>

Пример использования курсора : DECLARE fo_curs CURSOR STATIC FOR

SELECT name_rus from fo ORDER BY name_rus DECLARE @name varchar(50)

OPEN fo_curs

FETCH FIRST FROM fo_curs INTO @name WHILE @@FETCH_STATUS=0

BEGIN PRINT @name

FETCH NEXT FROM fo_curs INTO @name END

CLOSE fo_curs DEALLOCATE fo_curs

2.7. Обеспечение безопасности и сохранности данных в Microsoft SQL Server. Управление базами данных. Роли. Назначение прав пользователям (GRANT, DENY, REVOKE). Методы и технологии защиты данных в SQL Server.

Система безопасности и администрирование SQL Server . .

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

Управление базами данных

Для создания базы данных средствами TSQL используется команда CREATE DATABASE, однако обычно для этой цели используются возможности SQL Server Management Studio. В SQL сервер определено достаточно много операций с базами данных: увеличение (уменьшение) размеров файлов, изменение конфигурации (команда ALTER), присоединение и отсоединение, передача прав владения, изменение имени, просмотр свойств и, наконец, удаление ( DROP

DATABASE ).

Как и в большинстве серверов баз данных, в SQL Server существует пользователь, наделенный всеми административными полномочиями - это System Administrator или ‘sa'. После начальной установки сервера пароль sa пуст. Пользователь, создающий новую базу данных, автоматически становится её владельцем (‘dbo' – Data Base Owner). В момент создания базы определяется и пользователь 'guest'. Если учётная запись пользователя явно не отображается в пользователя конкретной базы данных, пользователю предоставляется неявный доступ с использованием гостевого имени guest. Обычно guest запрещают.

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

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

Db_owner. Имеет все права в базе данных

Db_accessadmin. Может добавлять или удалять пользователей Db_securityadmin. Управляет всеми разрешениями, объектами, ролями и пользователями

Db_ddladmin. Может выполнять все команды DDL, кроме GRANT,

DENY, REVOKE

Db_backupoperator. Может выполнять команды архивир. данных Db_datareader. Может просматр. любые данные в любой таблице Db_datawriter. Может модифиц. любые данные в любой таблице Db_denydatareader. Запрещ. просматр. люб. данные в люб. таблиц Db_denydatawriter. Запрещ модифицир люб данные в люб таблиц

Назначение прав пользователям. Основой системы безопасности

SQL Server являются (1) учётные записи (accounts); (2) пользователи

(users); (3) роли (roles); (4) группы (groups).

Когда пользователь подключается к SQL Server , действия, которые он может выполнять, определяются правами, выданными ему как

пользователю и члену роли. Права выдаются администратором СУБД, владельцем базы данных или владельцем конкретного объекта БД. Права в БД можно разделить на три категории: (1) права на доступ к объектам баз данных; (2) права на выполнение команд TSQL ; (3) неявные права. Сервер позволяет передавать права владения от одного пользователя другому.

Для управления разрешениями пользователя на доступ к объектам базы данных используются следующие команды:

GRANT { ALL [PRIVILEGES] | < вид действия >,…}

{ON {<имя таблицы или представления>} [(<имя столбца>,…)] | ON {< имя хранимой процедуры >}

| ON {< имя пользовательской функции >}

}

TO { PUBLIC | <имя объекта системы безопасности>,…}

[WITH GRANT OPTION]

[ AS <имя группы> | <имя роли>]

назначение прав пользователям , где

ALL – пользователю предоставляются все возможные разрешения, иначе указать <вид действия> – права на доступные для пользователя действия, а именно:

SELECT – на просмотр, для столбца таблицы и для таблицы (представления)

INSERT – на добавление, для таблицы (представления) в целом UPDATE – на изменение, для столбца таблицы и для таблицы (представления)

DELETE – на удаление, для таблицы (представления) в целом EXECUTE – на выполнение хранимых процедур

REFERENCES – возможность ссылаться на указанный объект (вводить в состав внешнего ключа).

<имя объекта системы безопасности> – учётные записи SQL Server , пользователи домена Windows; PUBLIC – для всех пользователей. WITH GRANT OPTION – позволяет пользователю, которому сейчас предоставляются права, самому назначать права на доступ к объекту другим пользователям.

AS <имя группы> | <имя роли> – участие пользователя в роли, которой предоставлена возможность предоставлять права другим пользователям.

Примеры :

GRANT SELECT ON authors TO public

GRANT INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom GO

GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION

GRANT SELECT ON Plan_Data TO Jack AS Accounting

-- Джек не входит в роль Accounting , но кто-нибудь из этой роли может предоставить право

DENY { ALL [PRIVILEGES] | < вид действия >,…}

{ON {<имя таблицы или представления>} [(<имя столбца>,…)]

| ON {<имя хранимой процедуры>}

| ON {<имя пользовательской функции>}

}

TO { PUBLIC | <имя объекта системы безопасности>,…}

[CASCADE]

[AS < имя группы > | < имя роли >]

запрещение доступа пользователям к объектам базы данных. CASCADE отзывает права не только у данного пользователя, но также и у всех, кому он права предоставлял.

Пример (на запрещение выполнения команды TSQL ): DENY CREATE TABLE TO Jack CASCADE

Команда REVOKE используется для неявного отклонения доступ к объектам базы данных. Синтаксис аналогичен команде DENY. Неявное отклонение подобно запрещению доступа с тем отличием, что оно действует только на том уровне, на котором определено. Пример: пользователю Jack , который является участником роли GoodUsers , предоставлены права на доступ к таблице XFiles . Если при помощи REVOKE для роли GoodUsers отклоняются права на доступ к этой таблице, пользователь Jack всё равно может обращаться к этой таблице, поскольку права для него определены явно. Если же применить REVOKE персонально для него, он потеряет право на доступ к XFiles.

Разрешения, предоставленные роли, наследуются их членами. Если пользователю предоставлен доступ к объекту через членство в одной роли, но запрещён в другой, то конфликт доступа всегда решается в пользу запрещения.

Технологии защиты данных в MS SQL Server

1.Механизм checkpoints – контрольных точек, которые генерируются через ~60 с для записи обновлённых страниц на диск (контрольная точка может быть поставлена принудительно командой

CHECKPOINT ).

2.Встроенные и внешние механизмы проверки целостности базы данных (запускаются автоматически или, как утилита DBCC –

Database Consistency Checker – вручную).

3.Физическое дублирование (если оно разрешено) файлов баз данных средствами операционной системы (включая механизм зеркальных жёстких дисков).

4.Резервирование баз данных и журналов транзакций – путём записи дампа базы данных на устройство резервирования (магнитную ленту или жёсткий диск).

5.Репликация – возможность дублирования информации путём её периодической (в некоторых случаях – синхронной) передачи с одного SQL сервера на другой.

6.Шифрование трафика между клиентом и сервером, а также шифрование кодов, использованных для работы с объектами БД (хранимых процедур, триггеров и др.)

2.8 СУБД Oracle – сравнение с другими сетевыми реляционными СУБД, состав, архитектура, типы данных, язык, примеры запросов. Язык SQL3 – способы работы с объектами в реляционных БД.

Попытки совместить средства манипулирования данными реляционной модели и способы описания внешнего мира объектноориентированной модели получили развитие в языке SQL-3.

1) Характеристики объекта определяется описанием строки таблицы. Поэтому вводится специальная возможность описания нового типа данных:

Create type Address ( number char (6), street char (30), aptno integer,

city char (30), state char (2), zip integer

);

На основе нового типа могут быть определены таблицы, например:

Create table Addresses of Address;

Новые типы допускается использовать и для определения столбцов (т.е. игнорируется требование атомарности атрибутов реляционной модели):

Сreate table People of new type Person ( name char (30),

address Address, birthdate date,

);

Наследование определяется с помощью фразы under.

Create type Employee under Person ( empno char(10),

dept ref(Department)

);

Здесь атрибут dept является ссылкой на объект, хранящийся в таблице Department. Т.е. в понятиях реляционной модели в этом столбце должен быть записан внешний ключ, указывающий на на одну из строк таблицы Department. На самом деле, в SQL-3 предполагается, что каждый объект имеет уникальный идентификатор - OID, именно он используется при создании ссылок на объекты.

Также в операторе CREATE TABLE можно определить и методы доступа к вновь созданным типам данных:

Create table People of new type Person ( name char(30),

address Address, birthdate date

function age(:р ref(Person)) return date; begin

current_age:=:р.birthdate-current_date; return current_age;

end;

);

В этом примере задана функция age, которая вычисляет текущий возраст объекта типа Person, хранимого в таблице People. К данной функции можно обращаться из оператора SELECT.

Oracle8i совместим с минимальным уровнем ANSI/ISO (SQL92). Он поддерживает большинство возможностей, заложенных в более продвинутые уровни SQL92, и даже некоторые из SQL3, но зачастую эти возможности реализованы в нем по-своему. В Oracle создан свой язык для создания триггеров, хранимых процедур и просто скриптов (в Oracle их принято называть безымянными блоками). Этот язык получил название PL/SQL (Program Language SQL). Внешней процедурой в Oracle является подпрограмма, хранимая в DLL, или метод элемента библиотеки Java-класса.

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

2.9 СУБД MySQL – сравнение с другими сетевыми реляционными СУБД, интерфейсы управления и администрирования, организация данных, типы данных, язык, примеры запросов.

MySQL – клиент-серверная система управления реляционными базами данных, которая содержит многопоточный SQL-сервер, обеспечивающий поддержку различных вычислительных машин баз данных, а также несколько различных клиентских программ и библиотек, средства администрирования и широкий спектр программных интерфейсов. Разработкой и сопровождением системы занимается компания MySQL AB (Швеция, David Axmark).

Характеристики СУБД

SQL СУБД (реляционная), быстрая, но не оптимизированная под поиска и добавления, если предстоят частые изменения.

Стандарты: entry level SQL92, ODBC levels 0-2.

Лицензия - GPL/LGPL. Для хостинга лицензия не нужна.

Написана на C и C++. Базовая платформа: Solaris

2.7-2.8, SuSE Linux 7.1 (ядро 2.4, ReiserFS), но работает также в других ОС.

Многопотоковая.

API для C, C++, Java, Eiffel, Perl, PHP, Python, и др.

Парольная защита.

Таблицы в виде B-tree со сжатием индекса. До 32 индексов на таблицу. До 16 колонок на индекс.

По умолчанию MySQL-таблицы имеют максимальный размер около 4 Гб.

Записи переменной длины. Есть примеры использования MySQL с 60000 таблиц и 5 миллиардами строк.

Поддержка koi8-r и cp1251 (сортировка, сравнение и т.д.).

Клиенты могут соединяться по TCP/IP (можно использовать только, если никто не подслушивает) или

Unix socket.

Имеются расширения к ANSI SQL92. Отсутствующие возможности ANSI SQL92:

Вложенные подзапросы

хранимые процедуры и тригеры (тригеры не планируются совсем)

Внешние ключи Представления

Основные модули СУБД

mysql – клиентская часть СУБД. Она обеспечивает интерфейс командной строки с СУБД MySQL, и возможность неинтерактивной пакетной обработки.

mysqlaccess – используется, чтобы внести в список привилегии пользователя для конкретной базы данных. Это дает информацию, которая может быть полезна при диагностировании проблем с доступом пользователей к данной базе данных.

mysqladmin – выполняет административные функции. Данная команда может использоваться для создания баз данных,изменения пароля пользователя (администратор может изменить пароль любому пользователю, а рядовой пользователь – только свой собственный), перезагрузки и остановки сервера, просмотра списка процессов, запущенных на сервере.

mysqld – программа является ядром СУБД MySQL. Она запускается как демон в системе и принимает подключения из клиентских программ, выполняя запросы и возвращая результаты. Она многопоточная,

то есть обработает больше чем один запрос одновременно.

mysqldump – программа используется для создания дампа содержания базы данных MySQL. Она пишет инструкции SQL в стандартный вывод. Эти инструкции SQL могут быть переназначены в файл. Можно резервировать базу данных MySQL, используя mysqldump, но при этом Вы должны убедиться, что в этот момент с базой данных не выполняется никаких других действий.

mysqlshow – программа может использоваться, чтобы показать, с какими базами данных MySQL работает, какие таблицы данная база данных содержит, и какие поля есть в таблице в данной базе данных.

Типы данных.

BIGINT [(length)]

 

8 байт целое (если компилятор

[UNSIGNED]

 

 

поддерживает такой тип)

[ZEROFILL]

 

 

 

 

 

 

BLOB

 

Двоичный объект (максимальная длина

 

65535 байт)

 

 

 

 

 

CHAR(NUM)

 

Строка фиксированной длины (1 <= NUM

 

<= 255)

 

 

 

 

 

 

 

Сохраняет информацию о дате. Использует

 

 

формат "YYYY-MM-DD". Может

 

 

модифицироваться как строка или число.

 

 

Диапазон для этого типа данных от 0000-

DATE

 

00-00 до 9999-12-31. Так что "проблема

 

 

2000" здесь не стоит. В отличие от

 

 

TIMESTAMP, DATE принимает годы и в

 

 

виде двух цифр от 0000 до 0099. Тип DATE

 

 

имеет длину 4 байта.

 

 

 

 

 

Объединение типов DATE и TIME. Тип

 

 

DATETIME идентичен типу TIMESTAMP

 

 

со следующими исключениями:

 

 

Когда запись вставляется в таблицу,

 

 

содержащую поля типа DATETIME, поле

DATETIME

 

DATETIME не изменяется.

 

Диапазон для поля типа DATETIME: '0000-

 

 

 

 

01-01 00:00:00' - '9999-12-31 23:59:59' при

 

 

использовании в контексте строки, и

 

 

'00000000000000' - '99991231235959' при

 

 

использовании в контексте числа.

 

 

Тип DATETIME имеет длину 8 байт.

 

 

 

DECIMAL (length,dec)

DOUBLE [(length,dec)]

FLOAT [(precision)]

FLOAT [(length,decimals)]

INT [(length)] [UNSIGNED] [ZEROFILL]

INTEGER [(length)] [UNSIGNED] [ZEROFILL]

LONGBLOB

MEDIUMBLOB

MEDIUMINT [(length)] [UNSIGNED] [ZEROFILL]

Десятичное число с плавающей запятой.

Число (4 или 8 байт) двойной точности с максимальной длиной и фиксированном числом десятичных чисел.

Номер с плавающей запятой. FLOAT(4) и FLOAT одиночная точность. FLOAT(8) обеспечивает двойную точность.

Число одиночной точности с максимальной длиной и фиксированном числом десятичных чисел (4 байта).

Целое (4 байта).

Целое число 4 байта

Двоичный объект с максимальной длиной 2**32 байт.

Двоичный объект с максимальной длиной

16777216 байт.

Целое (3 байта).

REAL [(length,dec)] Идентично DOUBLE (8 байт).

SMALLINT [(length)]

[UNSIGNED] Целое (2 байта).

[ZEROFILL]

TINYBLOB

 

Двоичный объект с максимальной длиной

 

255 байт.

 

 

 

 

 

TINYINT [(length)]

 

 

[UNSIGNED]

 

Целое число (1 байт).

[ZEROFILL]

 

 

VARCHAR(NUM)

TIME

TIMESTAMP(NUM)

Строка переменной длины (1 <= NUM <=

255)

Хранит информацию о времени. Использует формат "HH:MM:SS". Может использоваться как строка или число. Данные типа TIME имеют длину 3 байта.

Автоматически изменяется при вставке/обновлении. Имеет формат

YYMMDDHHMMSS или

YYYYMMDDHHMMSS. Когда используете mysql с ODBC и Access Вы должны использовать значение 14 для NUM, поскольку это заставляет MySQL всегда использовать в годах четыре цифры. Значение 12 заставит MySQL использовать в году две цифры. Значение по умолчанию - 14.

В случае таблиц с несколькими полями TIMESTAMP только первое такое поле будет модифицироваться автоматически.

Физическая организация данных

Каждая база данных находится в своём каталоге, имя которого соответствует имени базы. Каждая таблица находится в отдельном файле <имя таблицы>.MYD, индекс в файле <имя таблицы>.MYI, файл определения таблицы <имя таблицы>.frm

Основные команды MySQL

СУБД MySQL оперирует подмножеством языка SQL, соответствующим спецификации ANSI SQL 92.

3.1 Ретроспектива развития однопользовательских СУБД. Сравнительная характеристика современных однопользовательских СУБД.

Ретроспектива развития однопользовательских СУБД.

В восьмидесятые годы было разработано большое число однопользовательских СУБД. В нашей стране наибольшее распространение получили FoxBASE, dBASE (III, IV), Paradox, а в конце восьмидесятых годов приобрел популярность пакет Clipper. FoxBASE, dBASE и Clipper использовали одни и те же принципы организации информации и были совместимы на уровне файлов баз данных, поэтому иногда все эти системы рассматривали как модификации dBASE.

Система программирования dBASE была разработана фирмой AshtonTate. В dBASE III plus основное внимание было уделено совершенствованию пользовательского интерфейса (режим ASSIST), что существенно упростило процедуру создания и модификации баз данных, сортировку и индексацию записей. Создание и использование довольно сложных структур баз данных было возможно непосредственно из режима ASSIST без составления прикладных программ на языке dBASE, что делало эту СУБД доступной для широкого круга пользователей. Это обеспечило огромную популярность dBASE III plus, и в конце восьмидесятых годов эта СУБД являлась фактическим стандартом для реляционных баз данных.

Одним из недостатков СУБД dBASE, Paradox являлась невозможность создания с их помощью файлов .EXE, автономно работающих под управлением DOS. Именно поэтому широкое распространение (в нашей стране) приобрел пакет Clipper фирмы Nantucket, который с самого начала предназначался для компиляции прикладных программ. Clipper работал с файлами .DBF, обеспечивая достаточно высокое быстродействие. В тоже время это была открытая система, позволявшая расширять возможности языка за счет приложений, написанных на других языках программирования -

Assembler'е и C.

Сравнительная характеристика современных однопользовательских СУБД.

FoxPro – реляционная однопользовательская СУБД (с возможностью сетевого доступа), ориентированная на широкий класс пользователей. Производитель: Fox Software. Первая разработка датируется 1984 годом. FoxBase был задуман как улучшенный вариант dBASE, т.е. если dBASE умел что-то делать, то FoxBase должен был делать это лучше и быстрее.

С появлением на рынке FoxPro 2.0 был совершен переворот в области разработки баз данных на персональных компьютерах. Ускорение работы оказалось просто поразительным. В персональной системе базы данных стала возможной работа с таблицами, содержащими миллионы записей. Впервые разработчики Fox использовали в этой версии SQL-инструкции. FoxPro 2.0 представил разработку экранов и отчетов с помощью «мастеров». При этом мастер генерировал программный код, позволяя использовать и модифицировать его в основной программе. В версию FoxPro 2.5 была добавлена поддержка Windows, хотя по сути это было DOS-приложение, лишь внешне приняв облик Windows-продукта.

Microsoft Access – реляционная СУБД для персональных компьютеров. Наилучшим образом отвечает потребностям индивидуального использования или использования в рабочих группах для манипулирования данными, объем которых исчисляется несколькими мегабайтами. Для обеспечения многопользовательского доступа Access использует архитектуру "файл-сервер" вместо архитектуры "клиент-сервер". СУБД Access включена в версии пакета

Microsoft Office Professional.

3.2 СУБД Microsoft Access. Основные возможности и недостатки. Объекты Access. Типы данных. Средства программирования: язык VBA, макросы. Примеры реализации SQL-запросов в среде Access. Варианты импорта и экспорта данных.

СУБД Microsoft Access. Microsoft Office Access или просто Microsoft Access — реляционная СУБД корпорации Microsoft. Имеет много функций, включая связанные запросы, связь с внешними таблицами и базами данных. Благодаря встроенному языку VBA, в самом Access можно писать приложения, работающие с базами данных.

Основные возможности. В Access поддерживаются разнообразные всплывающие и многоуровневые меню, работа с окнами и мышью, реализованы функции низкоуровневого доступа к файлам, управления цветами, настройки принтера, представления данных в виде электронных таблиц и т.п. Система также обладает средствами быстрой генерации экранов, отчетов и меню, поддерживает язык управления запросами SQL, имеет встроенный язык Visual Basic for Applications (VBA), хорошо работает в сети. СУБД Access позволяет использовать другие компоненты пакета Microsoft Office, такие как текстовый процессор Word for Windows, электронные таблицы Excel и т.д.

Приведем некоторые из средств Microsoft Access, существенно упрощающие разработку приложений.

Подробнее о возможностях:

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

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

3.Модель событий. Модель событий, похожая на используемую в языке Microsoft Visual Basic, позволяет приложениям реагировать на возникновение различных событий, например нажатие клавиши на клавиатуре, перемещение мыши или истечение определенного интервала времени.

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

5.Построитель меню. Предназначен для помощи при создании специальных меню в приложениях. Кроме того, специальные меню могут содержать подменю.

6.Улучшенные средства отладки. Помимо установки точек прерывания и пошагового выполнения программ на языке VBA, можно вывести на экран список всех активных процедур. Для этого следует выбрать команду Вызовы в меню Вид или нажать кнопку [Вызовы) на панели инструментов.

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

8.Улучшенный интерфейс защиты. Команды и окна диалога защиты упрощают процедуру защиты и смены владельца объекта.

9.Программная поддержка механизма OLE. С помощью механизма OLE можно обрабатывать объекты из других приложений.

10.Программы-надстройки. С помощью VBA можно создавать программы-надстройки, например нестандартные мастера и построители. Мастер — средство Microsoft Access, которое сначала задает пользователю вопросы, а затем создает объект (таблицу, запрос, форму, отчет и т.д.) в соответствии с его указаниями.

Диспетчер надстроек существенно упрощает процедуру установки программ-надстроек в Microsoft Access.

Основные недостатки

ограничение размера базы данных в 2 Гб и по количеству записей. Т.е. Ms Access больше подходит для небольших бд.

В MS Access используется язык программирования Visual Basic for Applications (VBA), существенным недостатком которого является невозможность создания выполняемых файлов (.EXE), которые бы не требовали для работы наличия Access.

Объекты Access. В Access база данных включает в себя все объекты, связанные с хранимыми данными, в том числе и те, которые определяют для автоматизации работы с ними (с данными). Основные объекты базы данных Access:

Таблица - объект, который определяется и используется для хранения данных.

Запрос - объект, который позволяет пользователю получить нужные данные из одной или нескольких таблиц. Для создания запроса можно использовать QBE (запрос по образцу) или инструкции SQL.

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

Отчет - объект, предназначенный для создания документа, который впоследствии м.б. распечатан или включен в документ другого приложения.

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

Модуль - объект, содержащий программы на Visual Basic. Модули м.б. независимыми объектами, содержащими функции, которые можно вызывать из любого места приложения, но они могут быть и непосредственно «привязаны» к отдельным формам или отчетам для реакции на те или иные происходящие в них изменения.

Типы данных.

1. Текстовый.

Значением данного этого типа является совокупность символов (не более 255).

2.Числовой.

Значением может быть любое (действительное) число; два вида: целое и дробное.

3. Дата и (или) время.

Здесь необходимо придерживаться формата данного, например: дд.мм.гггг или дд-мм-гг и т.д. Значение месяца может быть в диапазоне от 1 до 12, дня – от 1 до 30 (31, 28)

4. Логический.

Значением данного этого типа является либо TRUE (истина, да, 1), либо FALSE (ложь, нет, 0).

5. Счетчик.

Значением является любое натуральное число. Считается автоматически.

6. Денежный.

Помимо этого, пользователь может создавать свои типы данных.

Средства программирования: язык VBA Это средство программирования, практически ничем не отличающееся от классического Visual Basic, которое предназначено для написания макросов и других прикладных программ для конкретных приложений. Наибольшую популярность получил благодаря своему использованию в пакете Microsoft Office. Широкое распространение Visual Basic for Applications в сочетании с изначально недостаточным вниманием к вопросам безопасности привело к широкому распространению макровирусов.

Особенности:

Оператор \ — деление нацело, любая дробная часть отсекается.Перед выполнением операции a\b a и b округляются до целого. Макросы. Это структура, состоящая из одной или нескольких макрокоманд, которые выполняются либо последовательно, либо в порядке, заданном определенными условиями. Основное назначение макросов — это создание удобного интерфейса приложения: чтобы формы и отчеты открывались при нажатии кнопок в форме или на панели инструментов или же привычным выбором команды меню; чтобы при открытии приложения пользователь видел на экране не окно База данных (Database), наполненное множеством таблиц, запросов, форм и отчетов, а некую понятную форму, с помощью которой можно было бы сразу производить желаемые действия и т. д. С помощью макросов можно создать удобные меню и панели инструментов для приложения

3.3 Основы объектно-ориентированного программирования на VBA Microsoft Access. Основные синтаксические конструкции языка. Объявление и использование процедур и функций. Обработка ошибок. Способы выполнения запросов к данным. Программирование в формах. Задание свойств элементов управления в формах в программах на VBA. Примеры. (Что делали на VB на практике)

Основу объектно-ориентированного программирования составляет работа с объектами, в качестве которых рассматриваются любые программируемые элементы. Основными объектами в Access являются таблицы, формы, запросы, отчёты, модули и макросы. Они строятся на основе мелких объектов – элементов управления, которые объединяются в более крупные объекты – семейства (наборы однотипных объектов). Все объекты имеют сохраняемый набор свойств, изменяя которые можно управлять объектом. Для каждого объекта имеется ряд методов – исполняемых инструкций.

Основные иерархические структуры объектов, используемые в

Access:

1.Модель объектов доступа к данным (Data Access Object – DAO) обеспечивает объектно-ориентированный интерфейс для работы с ядром базы данных Jet. А именно – доступ и обработку данных в базах данных, управление базами данных и их объектами с помощью свойств и методов, а также создание новых объектов и изменение структуры базы данных.

2.Модель объектов ActiveX Data Objects – ADO

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

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

Типы переменных:

Синтаксис. Dim переменная As тип

Тип данных Boolean (Bool) может принимать два значения — True (истина) и False (ложь). Этот тип данных присваивается переменным, задействованным в качестве флажков для обозначения состояния объектов. Также этот тип присваивается функциям, которые возвращают значение, сообщающее об успешном или неудачном выполнении какого-то действия. Численная переменная, не равная нулю, считается True; равная нулю — False. При конвертировании переменной типа Boolean в численную переменную возвращается значение -1, если переменная типа

Boolean имела значение True, и 0— если False.

Переменная типа дата/время представляет собой 64-разрядное число и может принимать значения даты от 1 января 100 года до 31 декабря 9999 года или значения времени от 0:00:00 до 23:59:59. Значения даты можно обозначать с помощью символа #, например #20/10/96#. Для преобразования даты используется функция Cdate: dtDate = CDate("20 October 1995")

Функция Day (число) после передачи ей даты возвращает число в диапазоне 1—31. Функция Month (месяц) выделяет из даты значение месяца— от 1 до 12. Функция Year (год) возвращает из переданной даты год.

Значение Null.

 

MyVar = ""

 

MyCheck = IsNull(MyVar)

' Returns False.

MyVar = Null

 

MyCheck = IsNull(MyVar)

' Returns True.

Массивы

Dim MyArray(10, 10,10) As Integer Dim sngMulti(1 To 5, 1 To 10) As Single

Dim sngArray() As Single ‘создан динамический массив

Dim varData(3) As Variant varData(0) = "Claudia Bendel" varData(1) = "4242 Maple Blvd" varData(2) = 38

varData(3) = Format("06-09-1952", "General Date")

Другой способ объявления массивов:

Dim A As Variant

A = Array(10,20,30)

Присвоение массива переменной типа Variant позволяет изменять размерность массива.

Объекты

Dim SmithBillBD As Object

Visual Basic поддерживает объект Collection (коллекция или семейство элементов), который служит для хранения элементов любых типов данных. Вы можете использовать семейство точно так же, как массив – для хранения целых чисел, цепочек символов и других типов данных. Объект Collection содержит методы для включения, удаления и контроля элементов в семействе.

Dim AppObjects As New Col lection

Чтобы добавить AppObject в семейство, воспользуйтесь методом Add для объекта Collection. В объекте семейства предусмотрен метод Item, который служит для адресации элементов семейства. Чтобы удалить элемент из семейства, используйте метод Remove.

Доступность

Ключевые слова Private и Public определяют доступность переменных и процедур. Использование Dim для объявления переменной на уровне модуля означает, что переменная доступна всем процедурам в этом модуле, но недоступна вне его. Замена Dim ключевым словом Private не отразится на доступности переменной; переменная будет доступна только процедурам модуля. Однако если заменить Dim на ключевое слово Public, то переменная будет доступна для всех модулей приложения. Процедуры и функции, которые добавляются в модуль, являются Publiс по умолчанию; они доступны всем модулям приложения. События процедур в модулях Form и Report являются Private по умолчанию, поэтому они доступны только модулю, в котором содержатся.

Обработка ошибок

Чтобы установить системное прерывание по обнаружению ошибки, поместите оператор On Error туда, где вы хотите активизировать это системное прерывание.

Sub CausesAnError()

' Direct procedure flow.

On Error GoTo ErrorHandler ' Raise division by zero error. Err.Raise 11

Exit Sub

ErrorHandler:

' Display error information.

MsgBox "Error number " & Err.Number & ": " & Err.Description End Sub

Другая форма оператора On Error Resume Next передает управление оператору, следующему за оператором с ошибкой. Этот оператор приводится ниже.

Publ ic Function MyFunctionO On Error Resume Next

If Err Then

‘обработка

End If

Exit Function

Resume возвращает управление программой оператору, вызвавшему ошибку, и пытается выполнить его снова. Если это приводит к повторной ошибке, то программа обработки ошибок сработает снова. Если вы используете оператор Resume, то лучше применить счетчик возникновения ошибки. По достижении некоторого предела счетчика следует выйти из процедуры. Resume Next передает управление оператору, следующему за оператором, приведшим к ошибке. Вы можете использовать этот прием только в том случае, если уверены, что ошибка — не критическая и может быть проигнорирована, или если ваш обработчик ошибок откорректирует ситуацию, вызвавшую ошибку.

Параметры процедур и функций.

Объявление:

Sub CalcFee(AcctTotal As Currency, ContractMonths As Integer)

Вызов:

CalcFee A, 24

Вы можете использовать ключевое слово Optional в определении процедуры или функции для указания того, что данный аргумент является необязательным. Необязательные (Optional) аргументы должны иметь тип Variant.

Sub CalcFee(AcctTotal As Currency, Optional ContractMonths As

Variant)

Чтобы создать процедуру для работы с массивом аргументов, в объявлении процедуры используйте аргумент ParamArray, причем не определяя размера массива.

Public Function Calc_Order(ParamArray Сosts As Variant) As

Currency

Задание свойств форм, отчетов и элементов управления в Visual

BasicОбъекты Form, Report и Control являются объектами

Microsoft Access. Свойства таких объектов можно задавать в процедурах Sub, Function или в процедурах обработки событий.

Можно также задавать свойства разделов форм и отчетов.

Чтобы задать свойство формы или отчета

Укажите ссылку на конкретную форму или отчет в семействе Forms или Reports, за которой следуют имя свойства и его

значение. Например, следующая программная строка задает для свойства Вывод на экран (Visible) формы «Customers» значение

True (–1):

Forms!Customers.Visible = True

Свойства формы и отчета можно также задавать из модуля объекта с помощью свойства объекта Me. Программы, использующие свойство Me, выполняются быстрее, чем программы, использующие полные имена объектов. Например, следующая программная строка в модуле формы «Customers» определяет свойство

Источник записей (RecordSource) формы «Customers»

через инструкцию SQL, возвращающую все записи, в которых значение поля «CompanyName» начинается с

«A»:

Me!RecordSource = "SELECT * FROM Customers " _ & "WHERE CompanyName Like 'A*'"

Чтобы задать свойство раздела формы или отчета Укажите ссылку на форму или отчет в семействе Forms или Reports, за которой следует свойство Section и целое значение или константа, определяющая раздел. В следующем примере задается значение False для свойства Вывод на экран (Visible) верхнего колонтитула формы «Customers»:

Forms!Customers.Section(3).Visible = False

Me!Section(acPageHeader).Visible = False

Примечания

В справке по предметному указателю можно найти следующие сведения о каждом свойстве:

допускается ли задание этого свойства в программе Visual Basic;

режимы, в которых можно задавать свойство. Не все свойства можно задавать во всех режимах. Например, свойство формы Тип границы (BorderStyle) можно задавать только в режиме конструктора формы;

какие значения следует использовать для задания свойства. Часто значения некоторых свойств в программе Visual Basic, отличаются от значений, выбираемых в окне свойств. Например, если значение свойства выбирается из списка, необходимо использовать это значение или его числовой эквивалент.

Чтобы задать в программе Visual Basic стандартные значения свойств для элементов управления, следует использовать метод

DefaultControl.

4.1 Механизмы доступа к информации, хранящейся в СУБД, из клиентских приложений. Технологии ODBC, OLE DB, ADO DB. Технология разработки программ, реализующих интерфейс доступа к Microsoft SQL Server с

помощью среды Visual Studio.NET.

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

Programming Interface, API) для доступа к данным этой СУБД.

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

В последнее время Windows-версии клиентского программного обеспечения наиболее популярных серверных СУБД, в частности

Microsoft SQL Server, Oracle, Informix, содержат также COM-серверы,

предоставляющие объекты для доступа к данным и метаданным. Использование клиентского API (или клиентских COM-объектов) является наиболее очевидным (и нередко самым эффективным с точки зрения производительности) способом манипуляции данными в приложении. Однако в этом случае созданное приложение сможет использовать данные только СУБД этого производителя, и замена ее на другую (например, с целью расширения хранилища данных или перехода в архитектуру <клиент-сервер>) повлечет за собой переписывание значительной части кода клиентского приложения - клиентские API и объектные модели не подчиняются никаким стандартам и различны для разных СУБД.

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

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

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

Open Database Connectivity (ODBC).

OLE DB.

ActiveX Data Objects (ADO).

Borland Database Engine (BDE).

Универсальные механизмы ODBC, OLE DB и ADO фирмы Microsoft представляют собой по существу промышленные стандарты. Что касается механизма доступа к данным BDE фирмы Borland, то он так и не стал промышленным стандартом, однако до недавнего времени применялся довольно широко, так как до выхода Delphi 5 был практически единственным универсальным механизмом доступа к данным, поддерживаемым средствами разработки Borland на уровне компонентов и классов.

Наиболее часто используемые в приложениях способы доступа к данным схематически изображены на рис. 1 (Возможные механизмы доступа к данным из приложений и средств разработки

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

Непосредственный вызов функций клиентского API (или обращение к COM-объектам клиентских библиотек).

Вызов функций ODBC API (или применение классов, инкапсулирующих подобные вызовы).

Непосредственное обращение к интерфейсам OLE

DB.

Применение ADO (или применение классов, инкапсулирующих обращение к объектам ADO).

Применение ADO + OLE DB + ODBC.

Применение BDE + SQL Links (или применение классов, инкапсулирующих обращение к функциям

BDE).

Применение BDE + ODBC Link + ODBC.

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

Технологии ODBC, OLE DB, ADO DB. (Open Database Connectivity)

— открытый интерфейс баз данных.

Необходимость создания ODBC появилась вследствие того, что каждая фирма — разработчица СУБД использовала свой диалект SQL, что делало невозможным обмен данными между двумя БД различных форматов. Поэтому вначале был разработан общий стандарт на SQL, получивший название CLI (Common Language Interface). Затем каждая фирма разрабатывала драйвер перевода своего диалекта SQL в CLI и наоборот.

ODBC предназначена для обеспечения возможности взаимосвязи между различными SQL-совместимыми БД.

Технология ODBC предусматривает создание дополнительного уровня между приложением и используемой СУБД. В архитектуре ODBC используется один ODBC Driver Manager и несколько ODBCдрайверов, отвечающих за реализацию особенностей доступа к каждой отдельной СУБД.

Преимущества:

-простота разработки приложения;

-технология ODBC позволяет создавать распределенные гетерогенные приложения без учета конкретных СУБД, т.е. приложение становится независимым от СУБД.

Недостатки:

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

-увеличение время обработки запросов, что связано с введением дополнительного программного слоя;

-необходимы предварительная инсталляция и настройка ODBCдрайвера (указание драйвера СУБД, сетевого пути к серверу, базы данных и т.д.) на каждом рабочем месте. Параметры этой настройки являются статическими, т.е. приложение изменить их самостоятельно не может;

-предоставляет доступ только к реляционным SQL-ориентированным БД. OLE DB

Но данные в БД могут быть представлены в любом виде и формате (электронные таблицы, документы в rtfформате, почтовые системы и т.д.).

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

Это требование и реализует технология OLE DB.

OLE DB ( Object Linking and Embedding Data Base) — технология,

предоставляющее решение обеспечения СОМ-приложениям доступ данным независимо от типа источника данных.

В технологии OLE DB используется механизм провайдеров, под которыми понимают поставщиков данных.

Провайдер представляет собой компонент СОМ, позволяющий принимать вызовы OLE DB и выполнять все необходимое для обработки запроса к источнику данных. Провайдер возвращает запрашиваемый объект — обычно это данные в табличном виде.

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

ADO, DAO

Технологии ODBC и OLE DB считаются хорошими интерфейсами передачи данных, но как программные интерфейсы имеют много ограничений, поскольку являются низкоуровневыми.

Для снятия этих ограничений была предложена технология ADO.

ADO (ActiveX Data Objects).

Данные технологии представляют собой высокоуровневые объектные модели (библиотеки функций) и создают еще один уровень абстракции между приложением и функциями ODBC и OLE DB. Технология ADO представляет иерархическую модель объектов для доступа к различным OLE DBпровайдерам данных. Объектная модель ADO включает объекты, обеспечивающие соединение с провайдером данных, создание SQL-запросов к данным и т.д. Модель объекта не содержит таблиц, среды. Здесь основными объектами являются:

-объект Набор данных;

-объект Соединение, создающий связь с провайдером данных; -объект Команда — выполнение процедуры.

Особенностью технологии ADO является возможность ее использования в Интернет/Интранет-приложениях для доступа к различным источникам данных.

В целом технологию ADO можно охарактеризовать как наиболее современную технологию разработки приложении для работы с распределенными БД по технологии клиент-сервер.

Технология DAO предназначена преимущественно для создания БД с помощью СУБД MS Access, т.к. кроме замены функций ODBC она осуществляет также прямой доступ к функциям ядра MS Jet базы данных Access.

Microsoft Access и Visual Basic

ВMS Access используется язык программирования Visual Basic for Applications (VBA), существенным недостатком которого является невозможность создания выполняемых файлов (.EXE), которые бы не требовали для работы наличия Access.

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

DATA CONTROL - объект управления данными. С помощью Data Control можно быстро создавать простые приложения для работы с базами данных практически без написания программного кода. А используя этот элемент управления вместе с объектами доступа к данным (Data Access Objects) можно создавать достаточно мощные по своим функциональным возможностям программные комплексы, предназначенные для обработки информации из баз данных. Объект управления данными - это компонент Visual Basic, который позволяет получить доступ и манипулировать данными, хранящимися в файлах баз данных различных форматов. Используя объект Data, вы можете достаточно быстро создавать работоспособные Windows-приложения практически без написания кода программы. Основные действия объекта управления данными:

1.Подключение (connect) к базе данных. 2.Открытие таблицы БД или определение при помощи соответствующего SQL-запроса критерия выбора записей из полей БД. 3.Передача данных из полей БД к связанным элементам управления, расположенным на форме (поле редактирования), где данные можно просматривать или изменять. 4.Добавление новых записей, удаление записей и обновление содержимого БД (здесь, правда, без написания нескольких строк кода не обойтись). 5.Закрытие базы данных.

Применение объекта Data дает возможность разработчику использовать в своих приложениях БД в наиболее распространенных в настоящее время форматах, таких как Microsoft Access, dBASE, FoxPro, Paradox, Btrieve, а также файлы электронных таблиц Microsoft Excel и Lotus 1-2-3. Кроме того, можно использовать в качестве источника данных обычные текстовые файлы (с расширением txt) или базы данных, доступные через интерфейс Open Database Connectivity

(ODBC).

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

Свойство RecordSource объекта Data определяет, из какой таблицы базы данных требуется использовать данные. Если требуется использовать данные из нескольких таблиц, для определения требуемого источника данных можно использовать язык структурированных запросов (SQL).

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

Вэтой области памяти и содержится информация из базы данных. Данные для объекта Recordset определяются свойствами RecordSource

и RecordsetType объекта Data.

Таким образом, набор записей (Recordset) представляет собой некоторое подмножество записей из одной или нескольких таблиц БД. При этом, он может содержать как полную копию таблицы, так и ее часть. Если источник данных определен с помощью языка SQL, то набор записей будет содержать строки из БД, удовлетворяющие соответствующему SQL-запросу.

ВVisual Basic 5.0 поддерживаются пять типов наборов записей. Но наиболее широко используются только три типа: набор записей динамического типа или динамический набор записей, набор записей типа таблица и статический набор записей.

Связанные с данными элементы управления При разработке приложений такие действия как открытие БД,

определение источника данных и др. возлагаются на объект управления данными. Однако, для создания полноценного приложения совершенно необходимым является наличие у разработчика средств визуализации самих данных. Для решения этой задачи в Visual Basic предусмотрены, так называемые, связанные с данными элементы управления (Data-bound Controls). В связанных элементах управления, расположенных на экранной форме, отображается содержимое полей текущей записи из БД (точнее, из набора записей).

Вкачестве связанных объектов управления могут выступать некоторые стандартные объекты Visual Basic, например такое как Text box (текстовое окно).

Кроме свойств, присущих обычным элементам управления Visual Basic, эти элементы управления имеют несколько общих свойств, специально предназначенных для связи с базами данных:

DataField – опр. имя поля в наборе записей, созданном объектом управления данными.

DataSource – опр. имя объекта управления данными, с которым связывается элемент управления.

DataChanged - Показывает, было ли изменено содержимое связанного элемента управления.

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

кроме как для работы с данными обычно не используются: Data-bound list box, Data-bound combo box, Data-bound grid.

Источником данных для любого связанного элемента управления всегда является объект управления данными. Когда пользователь при помощи кнопок со стрелками на объекте Data перемещает указатель текущей записи с одной записи на другую, обновление данных в связанных элементах управления происходит автоматически.

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

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

4.2. Способы организации Интернет-доступа к сетевым СУБД. Примеры программирования активных серверных страниц для организации доступа к сетевым реляционным СУБД на языке PHP.

История развития языков для гипертекстовых страниц:

1.HTML — язык компоновки документов и спецификации гиперссылок, используемый для кодировки документов в Web. 2.DHTML — дает возможность взаимодействия web-страниц с пользователем на клиентском компьютере.

3.Языки сценариев (JavaScript, VBScript) — генерируют объекты на основании HTML-страницы на стор клиента в окне браузера.

4. Технология создания динамических интерактивных Web-страниц с использованием объектно-ориентированного мультиплатформенного языка Java. Программы на языке Java называются аплетами и исполняются обычно на стороне клиента.

5.CGI-скрипты — программы, исполняемые на стороне web-сервера. CGI обеспечивает способ, посредством которого web-браузер осуществляет запуск web-приложения на стороне сервера, результатом его работы является html-страница, посылаемая клиенту.

6.ASP (Active Server Pages) – язык описания активных серверных страниц (активные серверные страницы – это файлы, которые обрабатываются на сервере и содержат текст HTML и код сценариев). ASP позволяет перемешивать HTML-код с программным кодом, что позволяет встраивать серверные программы в страницы, причем первые будут выполняться только на стороне сервера.

7.PHP (Personal Home Page) — выполняющийся на стороне сервера мультиплатформенный язык описания сценариев, встраиваемый непосредственно в HTML-код. Целью создания языка является разработка динамически генерируемых страниц в кратчайшие сроки.

8.ASP.NET — 1997 г., технология создания веб-приложений и вебсервисов, является составной частью платформы MS .NET и развитием более старой технологии MS ASP.

Связь Web-сервера с серверами баз данных.

WWW - доступ к существующим БД может осуществляться по одному основ. сценариев:

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

– связных HTML-документов.

2.Динамическое создание гипертекстовых документов на основе содержимого БД. Доступ к БД осуществляется программой (CGI, ASP, PHP), запускаемой в ответ на запрос web-клиента. Программа, обрабатывая запрос, просматривает содержимое БД и создает выходной html-документ, возвращаемый клиенту. Эффективно для больших и часто обновляемых БД, но возрастает нагрузка на сервер.

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

www-клиент – www-сервер – обработчик – ИХ. Использование скриптов, исполняемых Web-сервером.

Существует возможность получения документов как результата выполнения прикладной программы. Это реализуется на Web-сервере благодаря использованию интерфейса CGI. CGI определяет 4 инф. потока: переменные окружения, стандартный вход поток, стандартный вых. поток, аргументы командн. строки.

Perl (Practical Extraction and Report Language) является одним из наиболее гибких языковых средств, служащих для программирования интерфейсов CGI. Полнофункциональный язык программирования.

PHP (PHP Hypertext Preprocessor — препроцессор гипертекста РНР) представляет собой еще один широко применяемый язык сценариев с открытым исходным кодом, операторы которого могут встраиваться в код HTML. Он поддерживается многими Webсерверами, а также является предпочтительным языком Webсценариев для Linux. Разработка языка РНР проводилась с учетом возможностей многих других языков, таких как Perl, С, Java и даже до определенной степени — платформы Active Server Pages. Он поддерживает нетипизированные переменные, поскольку это позволяет упростить разработку. Назначение данного языка состоит в том, чтобы дать возможность разработчикам Web быстро создавать сценарии динамического формирования страниц. Одним из преимуществ РНР является его расширяемость, поэтому уже разработан целый ряд модулей расширения для поддержки таких функций, как подключение к базе данных, передача и прием электронной почты, а также обработка данных в коде XML.

В настоящее время разработчики чаще всего применяют сочетание таких программных средств с открытым исходным кодом, как HTTPсервер Apache, язык РНР и одну из систем баз данных — mySQL или

PostgreSQL.

4.3. Хранение информации в XML-формате: преимущества и недостатки. Организация хранения данных в XML-формате в СУБД Microsoft SQL Server. Примеры формирования выборок данных с использованием XML-элементов с помощью SQLзапросов. Язык запросов на основе XQuery.

XML - это метаязык, или проще говоря, XML - это язык для создания других языков.

XML целесообразно применять не всегда. XML-документы обычно длиннее замещаемых ими привычных форматов. Они требуют большей полосы пропускания сети, больше места для хранения, и больших затрат процессорного времени. Разбор XML медленнее, чем разбор оптимизированных форматов, да к тому же требует больше памяти. Но у XML есть несколько важных достоинств.

1.XML позволяет разработчику создать собственную разметку структуры хранимой информации(обладает большой гибкостью).

2.Разбор XML широко распространен, хорошо стандартизирован и реализован большим количеством производителей ПО, что позволяет извлечь

 

информацию из XML-документов практически

 

повсеместно.

 

 

 

 

3.В стандарт XML включена поддержка кодовых

 

страниц Unicode, что упрощает создание многоязычных

 

документов.

 

 

 

 

4.Приложения могут использовать XML-парсеры для

 

проверки структуры документов, а при использовании

 

схем -- и типов данных. Это может значительно

 

упростить

разбор

строго

структурированных

 

документов, снимая с программиста задачу проверки

 

правильности документа.

 

 

 

5.XML -- это текстовый формат, то есть читаемый,

 

легко документируемый и, иногда, более простой в

 

отладке.

 

 

 

 

6.Для работы с XML создано множество средств на

 

самых разных платформах, что делает использование

 

XML более простым по сравнению с бинарными

 

форматами при обмене сложными информационными

 

потоками.

 

 

 

 

7.XML-документы могут использовать значительную

 

часть инфраструктуры, созданной для HTML, включая

 

протокол HTTP и браузеры.

 

Структура файла формата XML. Простейший XMLдокумент

может выглядеть так, как это

показано

в Примере 1

Пример 1

 

 

 

 

<?xml version="1.0"?>

 

 

<list_of_items>

 

 

 

<item id="1"><first/>Первый</item>

 

<item

id="2">Второй

<sub_item>подпункт

1</sub_item></item>

<item id="3">Третий</item>

<item id="4"><last/>Последний</item> </list_of_items>

Обратите внимание на то, что этот документ очень похож на обычную HTML-страницу. Также, как и в HTML, инструкции, заключенные в угловые скобки называются тэгами и служат для разметки основного текста документа. В XML существуют открывающие, закрывающие и пустые тэги (в HTML понятие пустого тэга тоже существует, но специального его обозначения не требуется).

Тело документа XML состоит из элементов разметки (markup) и непосредственно содержимого документа - данных (content). XML - тэги предназначены для определения элементов документа, их атрибутов и других конструкций языка. Любой XML-документ должен всегда начинаться с инструкции , внутри которой также можно задавать номер версии языка, номер кодовой страницы и другие параметры, необходимые программе-анализатору в процессе разбора документа.

Правила создания XMLдокумента

В общем случае XMLдокументы должны удовлетворять следующим требованиям:

В заголовке документа помещается объявление XML, в котором указывается язык разметки документа, номер его версии и дополнительная информация Каждый открывающий тэг, определяющий некоторую

область данных в документе обязательно должен иметь своего закрывающего "напарника", т.е., в отличие от HTML, нельзя опускать закрывающие тэги

В XML учитывается регистр символов

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

и конечными тэгами, рассматривается в XML как данные и поэтому учитываются все символы форматирования ( т.е. пробелы, переводы строк, табуляции не игнорируются, как в HTML)

Если XMLдокумент не нарушает приведенные правила, то он называется формально-правильным и все анализаторы, предназначенные для разбора XMLдокументов, смогут работать с ним корректно.

Организация хранения данных в XML-формате в СУБД Microsoft SQL Server.

Модель данных: реляционная или XML

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

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

данные разрежены, их структура неизвестна или их структура может значительно измениться в будущем;

данные представляют иерархию контейнеров, а не ссылки между сущностями, и могут быть рекурсивными;

данные упорядочены;

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

Если ни одно из этих условий не выполняется, следует выбрать реляционную модель данных. Например, если данные представлены в формате XML, но приложение пользуется базой данных только для их хранения и извлечения, то для этого вполне подойдет тип данных [n]varchar(max). Хранение данных в XML-столбце обеспечивает дополнительные преимущества. В их число входят проверка структуры и правильности данных, а также поддержка детализированных запросов и обновлений XML-данных.

SQL Server поддерживает несколько вариантов хранения XMLданных.