- •Введение
- •Глава 1. Проектирование баз данных
- •1.1. История развития баз данных и субд
- •1.2. Введение в субд
- •1.2.1. Основные термины, понятия и определения
- •1.2.2. Классификация субд
- •1) Сетевые, корпоративные, распределенные, клиент-серверные, полнофункциональные, масштабируемые, “большие” субд.
- •2) Локальные, персональные, настольные, файл-серверные, “малые” субд.
- •1.3. Модели данных
- •1.3.1. Типы связей между объектами
- •1.3.2. Формы записи инфологической (концептуальной) модели
- •1.3.3. Уровни представления и независимости данных
- •1.3.4. Порядок взаимодействия пользователя, субд и ос
- •1.3.5. Поддержка целостности базы данных
- •1.3.6. Иерархическая модель
- •1.3.7. Сетевая модель
- •1.3.8. Реляционная модель
- •1.3.8.1. Отношения
- •1.3.8.2. Теоретико-множественные операции с отношениями
- •1.3.8.3. Правила Кодда
- •1.3.8.4. Индексирование таблиц
- •1.3.8.5. Связывание таблиц
- •1.3.9. Постреляционная модель
- •1.3.10. Многомерная модель
- •1.3.11. Объектно‑ориентированная модель
- •1.4. Модели использования баз данных в сети
- •1.4.1. Сеть
- •1.4.2. Модели использования баз данных
- •1.4.2.1. Локальная однопользовательская модель
- •1.4.2.2. Файл-серверная модель
- •1.4.2.3. Клиент-серверная модель
- •В моделях «клиент–сервер»
- •1.4.2.4. Модель удаленного доступа (rda)
- •1.4.2.5. Модель сервера данных
- •1.4.2.6. Трехзвенная распределенная модель
- •1.4.2.7. Модели серверов баз данных
- •1.4.2.8. Клиент-Интернет
- •1.4.2.9. ИнтерфейсOdbc
- •1.4.3. Мониторы обработки транзакций (tpm)
- •1.4.4. Децентрализованное управление базами данных
- •1.4.5. Таблицы в локальных сетях
- •1.5. Проектирование баз данных
- •1.5.1. Принципы и этапы проектирования и создания баз данных
- •1.4.Определение доменов атрибутов.
- •1.5. Определение первичных и вторичных ключей.
- •1.6. Определение суперклассов и подклассов для типов сущностей.
- •1.7. Создание er‑диаграмм для отдельных пользователей.
- •2.6. Создание er‑диаграмм для отдельных пользователей.
- •3.4. Создание er‑диаграммы глобальной логической модели.
- •4. Создание глобальной логической модели в среде целевой субд.
- •6. Разработка механизма защиты.
- •1.5.3. Правила формирования взаимосвязанных таблиц
- •1.5.4. Модели жизненного цикла и проектирование баз данных
- •1.5.4.1. Модели жизненного цикла
- •1.5.4.2. Обследование, системный анализ и постановка задачи
- •1.5.4.3. Инфологическое проектирование
- •1.5.4.4. Датологическое проектирование
- •1.5.4.5. Проектирование физической модели
- •1.5.4.6. Реализация, интеграция и внедрение
- •1.5.5. Выбор субд
- •1.5.5.1. Сравнение Visual FoxPro, Access, sql Server, Oracle и Excel
- •1.5.5.2. Методика балловой оценки программных средств
- •1.5.6. Case‑средства автоматизации проектирования
- •1. Ориентация на этапы жизненного цикла
- •2. Функциональная полнота
- •Пользователя в ms sql Server 7.0
- •1.6.2. Резервирование информации
- •1.6.3. Варианты разработки приложений
- •1.7. Стандартизация баз данных
- •1.8. ЯзыкSql
- •1.8.1. Введение вSql
- •1.8.2. Типы данныхSql
- •1.8.3. Оператор выбора данныхSelect
- •1.8.3.1. Назначение и синтаксис оператора
- •1.8.3.2. Объединение таблиц
- •1.8.3.3. Вложенные и коррелированные запросы
- •1.8.3.4. Запросы, использующиеExist, any, all
- •1.8.3.5. Стандартные функции
- •1.8.3.6. Запрос с группировкой
- •1.8.4. Операторы обновления базы
- •1.8.4.1. Оператор корректировки данныхUpdate
- •1.8.4.2. Оператор удаления записейDelete
- •1.8.4.3. Оператор включения записей insert
- •1.8.5. Представления
- •1.9. Транзакции
- •1.9.1. Определение транзакций
- •1.9.2. Организация транзакций
- •1.9.3. Журнал транзакций
- •1.9.4. Журнализация и буферизация
- •1.9.5. Индивидуальный откат транзакций
- •1.9.6. Восстановление после мягкого сбоя
- •1.9.7. Физическая согласованность базы данных
- •1.9.8. Восстановление после жесткого сбоя
- •1.9.9. Параллельное выполнение транзакций
- •1.9.10. Уровни изолированности пользователей
- •1.9.11. Гранулированные синхронизационные захваты
- •1.9.12. Предикатные синхронизационные захваты
- •1.9.13. Метод временных меток
- •1.10. ВстроенныйSql
- •1.10.1. Особенности встроенногоSql
- •1.10.2. Определение курсора
- •1.10.3. Открытие курсора
- •1.10.4. Чтение очередной строки курсора
- •1.10.5. Закрытие курсора
- •1.10.6. Удаление и обновление данных
- •1.10.7. Хранимые процедуры
- •Хранимой процедуры на сервере
- •1.10.8. Триггеры
- •1.10.9. ДинамическийSql
- •1.11. Архитектура субд и оптимизация запросов
- •1.12. Перспективы развития субд
- •Вопросы для самопроверки и контроля
- •1Оглавление
1.6.2. Резервирование информации
Рассмотрим основные способы резервирования информации.
Резервное копирование всей БДсостоит в создании резервной копии (точной копии или сжатой) на МД (зеркалирование дисков) или МЛ для полного восстановления всей БД. Резервная копия создается в режиме OnLine или в перерывах работы с БД.
Копирование изменений БДв журнал регистрации изменений (транзакций) в базе данных.
1.6.3. Варианты разработки приложений
Имеются три варианта разработки приложений:
Использование исключительно средств (если они имеются) СУБД (Oracle,VisualFoxpro).Достоинство:высокая эффективность обработки данных.Недостатки:трудно сменить в приложении тип СУБД, сложность и трудоемкость освоения разнообразных средств СУБД.
Этот вариант рекомендуется для больших предприятий, использующих один тип СУБД Oracleпри создании и использовании очень больших баз данных с длительным сроком работы, с хорошим процессом обучения персонала и сопровождения фирмойOracle.
Использование средств универсальных языков программирования Delphi,C++Builder,VisualC++ илиVisaulBasic*.Достоинства:универсальность, можно легко сменить в приложении тип СУБД, использование уже освоенных пользователем языков программирования, упрощение процесса освоения СУБД.Недостатки:более низкая эффективность обработки данных.
Этот вариант рекомендуется для предприятий, с ограниченным персоналом на обслуживание баз данных с различными типами СУБД и для предприятий‑разработчиков универсальных программных средств (ППП), легко настраиваемых на тип СУБД.
Комбинация первых двух вариантов. Для каждого приложения или его части выбирают наиболее подходящий вариант.
1.7. Стандартизация баз данных
В области информатики работает более 250 подкомитетов официальных стандартизирующих организаций. Приведем основные стандарты.
SQL 2008‑ расширение SQL‑92 возможностей управления хранимыми процедурами, объектно‑ориентированными таблицами, средствами определения типов и методов доступа к ним.
ODMG‑93- обеспечивает независимость прикладных программ от систем управления объектными базами (СУОБД).
CORBA‑ управление взаимодействием клиентов и серверов в распределенной сетевой среде с различными типами ОС и компьютеров.
SSA(IBM) ‑ обеспечивает переносимость операционных систем.
ODBC, ADO(Microsoft),BDE(Borland) ‑ доступ к базам данных с различными СУБД из прикладных программ (для BDE ‑ разработанных в Delphi).
1.8. ЯзыкSql
1.8.1. Введение вSql
SQL (Structured Query Language) – Структурированный Язык Запросов – стандартный язык запросов по работе с реляционными БД. Язык SQL появился после реляционной алгебры, в конце 70-х годов в компании IBM Research. В дальнейшем этот язык применялся во многих коммерческих СУБД и стал стандартом «де-факто» для языков манипулирования данными в реляционных СУБД.
Первый международный стандарт языка SQL был принят в 1989 г. (SQL/89 или SQL1 или ANSI/ISO).
В настоящее время действует стандарт, принятый в 2008 году (SQL:2008)
Операторы SQL встраиваются в базовый язык программирования, которым может быть любой стандартный язык типа C++, C#, Delphi, PHP и др. Кроме того, операторы SQL могут выполняться непосредственно в интерактивном режиме.
SQL подразделятся на два подмножества команд: DDL (Data Definition Language - язык определения данных) и DML (Data Manipulation Language - язык обработки данных). Команды DDL используются для создания новых баз данных, таблиц и столбцов, а команды DML - для чтения, записи, сортировки, фильтрования, удаления данных.
Существуют два типа языков описания запросов: язык запросов по образцу QBE (Query By Example) и структурированный язык запросов SQL (Structured Query Language).
Язык QBEпредполагает использование визуальных средств построения результирующей таблицы из первоначально пустой таблицы путем выборки и связывания нужных исходных таблиц и запросов, перетаскивания мышкой нужных колонок, формирования мастерами расчетных колонок и условий отбора записей, сортировки, группировки и агрегирования данных. Примером использования QBE является запросная форма СУБД Access.
Язык SQLпредполагает использование командных средств. Хотя синтаксис команд языка SQL и достаточно унифицирован для различных СУБД, но есть некоторые отличия в деталях. Существуют статический SQL (команды SQL включаются в выполняемый модуль после компиляции) и динамический SQL (команды SQL формируются в процессе выполнения программы и выполняются в интерпретирующем режиме). В результате выполнения запроса на выборку формируется новая таблица, называемая представлением (View), к которой устанавливается соответствующий указатель, называемый курсором (Cursor). Курсор служит для ссылки на нужное представление в командах открытия, перемещения по записями и закрытия нужного представления (п. 4.3.6).
Приведем классификацию основных команд SQL
Операторы определения данных DDL
CREATE TABLE - создает новую таблицу в БД.
DROP TABLE - удаляет таблицу из БД.
ALTER TABLE - изменяет структуру существующей таблицы или ограничения целостности, задаваемые для данной таблицы.
CREATE VIEW - создает виртуальную таблицу, соответствующую. некоторому SQL-запросу.
ALTER VIEW - изменяет ранее созданное представление.
DROP VIEW - удаляет ранее созданное представление.
CREATE INDEX - создает индекс для некоторой таблицы для обеспечения быстрого доступа по атрибутам, входящим в индекс.
DROP INDEX - удаляет ранее созданный индекс.
Операторы манипулирования данными (DML)
DELETE - удаляет одну или несколько строк, соответствующих условиям фильтрации, из базовой таблицы.
INSERT - вставляет одну строку в базовую таблицу. Допустимы модификации оператора, при которых сразу несколько строк могут быть перенесены из одной таблицы или запроса в базовую таблицу.
UPDATE - обновляет значения одного или нескольких столбцов в одной или нескольких строках, соответствующих условиям фильтрации.
Язык запросов Data Query Language (DQL)
SELECT - оператор, заменяющий все операторы реляционной алгебры и позволяющий сформировать результирующее отношение, соответствующее запросу.
Средства управления транзакциями
COMMIT - завершить комплексную взаимосвязанную обработку информации, объединенную в транзакцию.
ROLLBACK - отменить изменения, проведенные в ходе выполнения транзакции.
SAVEPOINT - сохранить промежуточное состояние БД, пометить его для того, чтобы можно было в дальнейшем к нему вернуться.
Средства администрирования данных
ALTER DATABASE - изменить набор основных объектов в базе данных, ограничений, касающихся всем базы данных.
ALTER DBAREA - изменить ранее созданную область храпения.
ALTER PASSWORD - изменить пароль Изменить пароль для всей базы данных.
CREATE DATABASE - создать новую базу данных, определив основные параметры для нее.
CREATE DBAREA - создать новую область хранения и сделать ее доступной для размещения данных.
DROP DATABASE - удалить существующую базу данных (только в том случае, когда вы имеете право выполнить это действие).
DROP DBAREA - удалить существующую область хранения (если в ней на настоящий момент не располагаются активные данные).
GRANT - предоставить нрава доступа на ряд действий над некоторым объектом БД.
REVOKE - лишить прав доступа к некоторому объекту или некоторым действиям над объектом.
Программный SQL
DECLARE - задает некоторое имя и определяет связанный с ним запрос к БД, который соответствует виртуальному набору данных.
OPEN - формирует виртуальный набор данных (курсор), соответствующий описанию указанного курсора и текущему состоянию БД.
FETCH - считывает очередную строку, заданную параметром команды из виртуального набора данных, соответствующего открытому курсору.
CLOSE - прекращает доступ к виртуальному набору данных, соответствующему указанному курсору.
PREPARE - сгенерировать план выполнения запроса, соответствующего заданному оператору SQL.
EXECUTE - выполнить оператор SQL, ранее подготовленный к динамическому выполнению. .
В коммерческих СУБД набор основных операторов расширен. В большинство СУБД включены операторы определения и запуска хранимых процедур и операторы определения триггеров.
Рассмотрим еще несколько команд.
CREATETABLE <имя таблицы> (<поле> <тип поля> [Not Null], ...) ‑ создание таблицы (Create Table Kadr (Tab Integer, Fam Char (30) Not Null Primary Key (Tab))). Обязательное присутствие значения в поле задается параметром Not Null. Основные типы полей в SQL в Delphi: SmallInt (Short), Integer (Long Integer), Numeric(x,y), Float (x,y), Char (n), Data, Boolean, Time, Money, Autoinc. Для других СУБД типы полей могут быть другими.
CREATE VIEW <имя представления> [(<имя столбца>,...)] AS<оператор SELECT> ‑ создание представления с новыми именами столбцов (Create View NameStroek As Select Stroiki.Ns FROM Stroiki).
ALTERTABLE <имя таблицы> {ADD|MODIFY|DROP} <поле> [<тип поля>] [NOTNULL, ... ‑ изменение структуры таблицы: включение (Add), изменение (Modify) и удаление (Drop, тип поля не указывается) полей таблицы (Alter Table Stroiki Add Gorod Integer Drop Kp).
UPDATE <таблица> Set <имя поля>={<новое значение>|NULL}, ...
[WHERE <условие>] ‑ изменение значений полей (Update Kadr Set Oklad=1.5*Oklad Where Cex=”Цех N2”).
CREATE TABLE <имя таблицы> (<поле> <тип поля> [NOT NULL], ...) ‑ создание таблицы (Create Table Kadr (Tab Integer, Fam Char (30) Not Null Primary Key (Tab))). Обязательное присутствие значения в поле задается параметром Not Null. Основные типы полей в SQL в Delphi: SmallInt (Short), Integer (Long Integer), Numeric(x,y), Float (x,y), Char (n), Data, Boolean, Time, Money, Autoinc. Для других СУБД типы полей могут быть другими.
ALTER TABLE <имя таблицы> {ADD | MODIFY | DROP} <поле> [<тип поля>] [NOT NULL, ... ‑ изменение структуры таблицы: включение (Add), изменение (Modify) и удаление (Drop, тип поля не указывается) полей таблицы (Alter Table Stroiki Add Gorod Integer Drop Kp).
UPDATE <таблица> SET <имя поля>={<новое значение>|NULL}, ...
[WHERE <условие>] ‑ изменение значений полей (Update Kadr Set Oklad=1.5*Oklad Where Cex=”Цех N2”).
INSERT INTO<имя таблицы>(<список полей>) {VALUES (<список значений>)| SELECT...}‑ включение новой записи или группы записей из другой таблицы.
Примеры
Insert Into Zakazhiki (Kz,Nz) Values (3,’ЗИЛ’); // включение одной записи
Insert Into Podrjdhiki (Kp,Np) Select KPodr, NPodr From SpravPodr
Where DSozd >01.01.80; //включение группы записей из таблицы SpravPodr
CREATE [UNIQUE] INDEX <имя индекса> ON <таблица> (<поле> [{ASC|ESC}],...) ‑ создание индекса (Create index indproba on stroiki (kz, kp)).
DROP TABLE/VIEW <имя> ‑ удаление таблицы/представления (Drop Table Stroiki).
DROP INDEX [“<имя таблицы>”.]<имя индекса> ‑ удаление индекса.
DROP INDEX [“<имя таблицы>”.]PRIMARY ‑ удаление главного индекса.
DELETE FROM <имя таблицы> [WHERE<условие>]‑ удаление записей.