- •Шехтман в. Е.
- •1. Базы данных и модели данных
- •1.1. Введение.
- •1.2. Файлы операционной системы
- •1.3. Пример базы данных.
- •1.4. Иерархическая модель данных
- •1.5. Сетевая модель данных
- •1.6. Инвертированные списки.
- •2. Введение в реляционную модель данных.
- •1.7. Реляционная модель данных
- •3. Реляционная алгебра
- •3.1. Теоретико-множественные операции.
- •3.2. Специальные операции ra
- •4. Нормализация данных
- •4.1. Полная декомпозиция.
- •Магазин товар ндс
- •Товар ндс
- •Магазин ндс
- •Товар ндс
- •Магазин товар ндс
- •4.2. Проблема дублирования данных.
- •1 Глобус 33-33-33
- •2 Глобус 33-33-33
- •4 Океан 77-77-77
- •4.3. Висячие записи.
- •Поставщик Тел
- •4.4. Проблемы, возникающие из-за неудачной структуры данных.
- •4.5. Пятая нормальная форма (5нф).
- •4.6. Функциональная зависимость.
- •4.7. Связь между фз и полной декомпозицией отношения.
- •4.8. Первая нормальная форма (1нф).
- •4.9. Вторая нормальная форма (2нф).
- •4.10. Третья нормальная форма (3нф).
- •4.11. Нормальная форма Бойса-Кодда (нфбк).
- •4.12. Многозначная зависимость.
- •4.13. Четвертая нормальная форма (4нф).
- •4.14. Пример нормализации.
- •4.15. Резюме. Нормальные формы.
- •5. Инфологическое моделирование.
- •5.1. Сущность и набор сущностей
- •5.2. Связи между сущностями.
- •5.3. Рекурсивная связь. Роли.
- •5.4. Множественные связи.
- •5.5. Суперсущности и производные сущности
- •5.6. Слабые наборы сущностей
- •5.7. Борьба с избыточнотью
- •5.8. Преобразование инфологической модели в физическую модель.
- •5.9. Пример инфологического моделирования.
- •6. Язык sql
- •6.1. История sql.
- •6.2. Структура sql.
- •6.3. Язык запросов
- •6.4. Простые запросы на выборку данных.
- •6.5. Агрегатные (групповые) функции.
- •6.6. Вложенные запросы
- •6.7. Внешние объединения
- •6.8. Изменение данных
- •Insert into r1 (o, fio, d) values (5, ‘Иванов’, ’бд’)
- •7. Представления.
- •8. Определение схемы базы данных и ограничений целостности
- •9. Транзакции
- •9.1. Свойства транзакций
- •9.2. Надежное хранение данных
- •9.3. Параллельное выполнение транзакций
- •9.3.1. Коллизия “пропавшие изменения” - lost update problem
- •9.3.2. Коллизия “промежуточные данные” - dirty read
- •9.3.3. Коллизия “Несогласованные данные” - unrepeatable read, inconsistent analysis
- •9.3.4. Коллизия “фантом” - phantom
- •9.4. Уровни изолированности
- •9.5. Тупики
- •10. Ограничение прав доступа в целях обеспечения безопасности
- •11. Физическая организация баз данных
- •11.1. Организация размещения данных.
- •11.2. Организация индексов
- •11.2.1. Поиск в бд.
- •11.2.2. Плотный индекс (индексно-прямые файлы).
- •11.2.3. Неплотный индекс (индексно-последовательные файлы).
- •11.2.4. Сбалансированные деревья.
- •11.2.5. Инвертированные списки.
- •12. Архитектура субд. Методы оптимизации запросов.
- •Логические преобразования запросов.
- •Преобразования запросов с изменением порядка реляционных операций.
- •13. Аналитические системы.
- •Анализ данных.
- •Хранилища данных
- •Типы ошибок
- •Способы реализации olap.
- •Требования к средствам реализации систем оперативной и аналитической обработки данных
- •Многомерная модель данных.
- •Разработка данных
- •14. Загружаемые процедуры.
- •In pr double precision)
- •If eof then leave Cl end if;
- •Insert into providers(code, name)
- •Values (nr.Codec, ‘*** новый поставщик ***’);
- •15.4. Модель сервера приложений (трёхзвенная архитектура, “тонкий клиент”)
- •Список литературы
- •15. Модели совместного доступа к бд
- •15.1. Файл-серверная модель.
- •15.2. Модель клиент-сервер с бизнес-логикой на клиенте.
- •15.3. Модель клиент-сервер с бизнес-логикой на сервере субд (хранимые процедуры и триггеры) и частично на клиенте.
8. Определение схемы базы данных и ограничений целостности
Схема базы данных содержит объявления отношений (таблиц или представлений) а также большое количество других объектов: индексов, триггеров, хранимых процедур и др., о которых речь впереди.
Под целостностью понимается соответствие инфологической модели предметной области, хранимой в БД, объектам реального мира и их взаимосвязям в каждый момент времени. Предположим, мы формируем базу данных, для отслеживания товарного кредита покупателям в оптовой торговой фирме. В этом случае мы должны учесть наличие товара на складах фирмы, а также о товаре, перешедшем к покупателю, но еще не оплаченном им. В этом случае нам может быть неважным, на каком из складов нашей фирмы (или на каком стеллаже на складе) находится товар – эта информация несущественна с точки зрения товарного кредита. С другой стороны, нам очень важно знать, у какого покупателя и в каком количестве он находится. Противоречием была бы ситуация, когда в результате акта передачи конкретного товара в кредит покупателю запись о переданном товаре не имела бы ссылки на конкретного покупателя или осталось бы незаполненным поле даты совершения акта передачи в кредит. Это были бы нарушения ограничений целостности.
Различают следующие ограничения целостности:
Ключи.
Внешние ключи (или ссылочные ограничения). Это ограничения целостности на уровне связи между отношениями: обязательность связи, каскадное удаление или изменение данных, ограничения по мощности связи.
Ограничения атрибута: значение по умолчанию, обязательность или необязательность значения, условия на значение.
Ограничения на уровне строки отношения.
Ограничение целостности на уровне отношения.
Так называемые утверждения (assertion) – любое булево выражение
Бывают и недекларативные (откладываемые, динамические) ограничения целостности. Они поддерживаются аппаратом триггеров.
Вернемся к определению схемы базы данных и к способу выражения разного рода ограничений целостности (т. е. рассмотрим раздел языка SQL, получивший название DDL).
Для объявления таблицы используется оператор:
CREATE TABLE <имя> (<список элементов>)
Для удаления таблицы используется оператор (отметим, что невозможно удалить таблицу, на которую есть ссылки в дочерних таблицах):
DROP TABLE <имя>
Элемент обычно представляет собой пару, состоящую из имени атрибута (поля) таблицы и его типа. Кроме того, атрибут или группа атрибутов могут быть объявлены уникальными или образующими первичный ключ. Для этого используются слова UNIQUE и PRIMARY KEY. Разница между ограничением уникальности и ограничением первичного ключа в следующем:
У таблицы может быть только один первичный ключ, но несколько групп уникальных атрибутов
Ни одно значение атрибута, входящего в первичный ключ не может содержать значение NULL, но атрибуты, на которые наложено ограничение уникальности, могут принимать значение NULL.
Другие ограничения, которые могут быть наложены на атрибут:
NOT NULL – атрибут не может иметь неопределенное значение
DEFAULT <значение> - если атрибуту явно не установлено значение, то он принимает <значение> по умолчанию
Можно добавить атрибуты в уже существующее отношение:
ALTER TABLE <имя> ADD <элемент>
Можно удалить атрибут из существующего отношения:
ALTER TABLE <имя> DROP <имя атрибута>
Общий вид оператора создания (объявления) отношения с ограничениями целостности:
<опр. таблицы> ::= CREATE TABLE <имя> (<описание элемента таблицы> [{,<описание элемента таблицы>}…])
<описание элемента таблицы> ::= <определение столбца> | <определение ограничений таблицы>
<определение столбца> ::= <имя> <тип> [<знач. по умолчанию>][<доп. Ограничения столбца>…]
<знач. по умолчанию> ::= DEFAULT {<literal>|USER|NULL}
<доп. Ограничения столбца> ::= NOT NULL | <ограничение уникальности столбца> | <ограничение по ссылкам столбца> |
CHECK <условие проверки на допустимость>
<ограничение уникальности столбца> ::= UNIQUE
<ограничение по ссылкам столбца> ::= FOREIGN KEY <ссылка>
<ссылка> ::= REFERENCES <имя основной таблицы> <(поля первичного ключа основной таблицы)>
PK – автоматическое создание индексов
Для вторичных индексов:
CREATE [UNIQUE] INDEX <имя индекса> ON <имя таблицы>
(<имя столбца>[<признак упорядочивания>] | [,<имя столбца > [<признак упорядочивания >]…)
<имя индекса> - уникальный идентификатор для БД
<признак упорядочивания> - {ASC | DESC}
ASC – по возрастанию, DESC – по убыванию
DROP INDEX <имя индекса>
Пример: выразим на SQL объявления таблиц из базы данных о поставках и продажах товаров (см. пример по нормализации):
Таблица Товары:
CREATE TABLE GOODS (
CODE INTEGER NOT NULL PRIMARY KEY,
NAME CHAR(50) NOT NULL,
NDS INTEGER DEFAULT 20 NOT NULL CHECK (NDS >=5 AND NDS <=30) )
Таблица Города:
CREATE TABLE CITIES (
CODE INTEGER NOT NULL PRIMARY KEY,
NAME CHAR(50) NOT NULL,
COUNTRY CHAR(50) NOT NULL)
CREATE TABLE PROVIDERS ( CODE INTEGER NOT NULL PRIMARY KEY, NAME CHAR(50) NOT NULL, CITY INTEGER NOT NULL, FOREIGN KEY (CITY) REFERENCES CITIES (CODE) ) |
|
CREATE TABLE PROVIDERS ( CODE INTEGER NOT NULL PRIMARY KEY, NAME CHAR(50) NOT NULL, CITY INTEGER NOT NULL FOREIGN KEY REFERENCES CITIES (CODE) ) |
Два варианта
определения
PROVIDERS
(таблица Поставщики)
Таблица Поставки:
CREATE TABLE SUPPLIES (
CODEC INTEGER NOT NULL,
CODEG INTEGER NOT NULL,
DAT DATE NOT NULL,
WEIGHT DOUBLE PRECISION NOT NULL,
PRICE DOUBLE PRECISION NOT NULL,
На следующей строке именованное ограничение:
CONSTRAINT PK_PURCH PRIMARY KEY (CODEC, CODEG, DAT),
FOREIGN KEY (CODEC) REFERENCES PROVIDERS (CODE),
FOREIGN KEY (CODEG) REFERENCES GOODS(CODE)
)
Таблица Продажи:
CREATE TABLE SELLS (
CODEG INTEGER NOT NULL,
DAT DATE NOT NULL,
WEIGHT DOUBLE PRECISION NOT NULL,
PRIMARY KEY (CODEG, DAT),
FOREIGN KEY (CODEG) REFERENCES GOODS (CODE)
)
Рассмотрим на примере таблиц SELLS и GOODS возможные нарушения ограничений ссылочной целостности.
Поскольку установлено ограничение внешнего ключа между атрибутом CODEG таблицы SELLS и первичным ключом таблицы GOODS, то возможно нарушение, когда в SELLS вводится строка, значение атрибута CODEG которой отсутствует в GOODS.
С другой стороны, возможно нарушение при попытке удалить запись в GOODS (или изменить значения первичного ключа) с кодом товара, который уже присутствует в SELLS.
При нарушении первого типа необходимо отвергнуть попытку вставки строки в SELLS. При нарушении второго типа можно избрать одну из трех стратегий обработки нарушения:
Запрет на изменение полей первичного ключа для строк основной таблицы, для которых имеются строки в подчиненной таблице (и запрет на удаление таких строк). Эта стратегия называется Restrict (запрет). Эта стратегия применяется по умолчанию.
При изменении полей первичного ключа изменяются поля внешнего ключа (название стратегии – Cascade).
При изменении первичного ключа в основной таблице, поля внешнего ключа становятся неопределенны (название стратегии – Relation или SET NULL)
При определении ограничения внешнего ключа можно выбрать одну из этих стратегий независимо для изменений (UPDATE) и вычеркиваний (DELETE). Для этого после определения ограничения внешнего ключа следует указать
ON [UPDATE|DELETE] [SET NULL|CASCADE|RESTRICT]
Может быть использовано два таких выражения. При их отсутствии принимается стратегия по умолчанию. Ею является Restrict-стратегия (запрет удаления-модификации).
Общая форма изменения существующих отношений:
<Изменить описание таблицы> ::= ALTER TABLE <имя>
{ADD <определение столбца>| ALTER <имя столбца> {SET DEFAULT <значение >| DROP DEFAULT} |
DROP <имя столбца> { CASCADE | RESTRICT} |
ADD {<определение PK >|< определение FK > | < условие уникальности данных >|< условие проверки >} |
ALTER TABLE GOODS
ADD EXPIRED DATE DEFAULT NULL
CHECK (EXPIRED > NOW() + 10 )
ALTER TABLE GOODS
ADD TIP CHAR(10) DEFAULT NULL
CHECK ( TIP IS NULL OR TIP = “Овощ” OR TIP = “Фрукт” )
