- •Курс за третий семестр. Введение в субд. Базы данных как аппарат моделирования.
- •Базы данных
- •Классификация бинарных отношений
- •Реляционные базы данных
- •Сжатие избыточной информации
- •Нормализация баз данных
- •Моделирование бд. Нарушение целостности
- •К эволюции сетевых бд (этапы)
- •Определение бд в рамках архитектуры «клиент-сервер»
- •Язык sql (Structured Query Language)
- •Структура sql
- •Ограничение ссылочной целостности
- •Команды dml
- •Предикаты в sql
- •Выборка из нескольких таблиц
- •Опции group by и having Группировка и групповые вычисления
- •Опции order by и union
- •Предикаты, использующие выборку Вложенные подзапросы
- •Создание представлений
- •Проблемы модификации представлений
- •Проблема исчезающих значений
- •Транзакции
- •Примеры транзакций
Структура sql
Data Definition Language Data Manipulation Language
(язык определения данных) (язык преобразования данных)
create/alter/drop table insert – добавление записи
Команды создания и изменения delete – удаление записи
структуры таблицы: update – изменение значений полей
create/alter/drop index* select – команда выборки
database*
* - в стандарте отсутствует
alter – изменять
drop – удалить
Грубо говоря, SQL состоит из команды select.
Create Table (имя таблицы) ((имя поля, тип поля [размерность]), {ограничение целостности уровня поля})
Так описываются все поля таблицы. В конце стоит ограничение целостности уровня записи и (в ANSI) уровня ссылочной целостности.
Типы данных полей: integer, character (символьная строка), decimal, numeric, smallint, float, real, double precision, date, time.
Другие популярные, но в стандарт не входящие, типы: money/currency, autoinc (авто приращение +1).
Ограничение целостности уровня поля:
Not null – в поле не разрешены значения null.
Unique – значения поля не должны повторяться.
Primary key – данное поле содержит значение первичного ключа.
Check <предикат> - проверка значения поля.
Default <выражение> - автоматически появляется при добавлении записи.
References* <имя таблицы > (имя поля этой таблицы) – ссылается на заданное поле заданной таблицы. Данное поле является внешним ключом по отношению к заданному полю как к первичному.
Ограничение целостности уровня записи:
Unique – уникальная запись (не может повторяться)
Primary key (список полей) – данный список полей образует первичный ключ.
Check <предикат> - предикат ссылается на несколько полей записи.
Foreign key (список 1 полей) – внешний ключ.
References (имя таблицы) имена полей – задан список полей 1, играет роль внешнего ключа по отношению к заданной таблице как к родительской, в которой список 2 является первичным ключом.
Ограничение ссылочной целостности
(Согласно ANSI)
Название команды модификации
Insert Cascades
Delete of (имя родительской таблицы) Nulls
Update Restricted
Create Index имя список полей
У него нет семантики
В рамках реляционного подхода таблица есть отношения, то есть множество, а в понятии множества порядок перечисления элементов отсутствует, но такой порядок исключительно важен в реализации. Все быстрые алгоритмы поиска (доступа) основаны на некотором упорядочивании компонент файла. Проблема: доступ к разным значениям нуждается в разном порядке компонент. Решение: хранить нужные порядки в разных файлах логически, то есть хранить не сами записи, а ссылки на них. Любая реализация SQL сама создаёт множество индексных файлов, содержащих такие ссылки. В частности, создаются индексы для значений ключевых полей.
Create table Customer (ID integer not null primary key, name char(20), city char(20), credit decimal not null check(credit>=0), birthday date check(year(birthday)>1900))
Create table Employee (ID integer not null primary key, name char(20), city char(20), comm decimal not null default 0, birthday date)
/*comm – доля выручки с заказа*/
Create table Orders (ID integer not null primary key, Cust_Ref integer not null references Customer(ID) //*//, Emp_Ref integer references Employee(ID) //*//, startdate not null, finishdate not null check(startdate<finishdate)
* - имеется первичный ключ по умолчанию
delete of Customer cascades
delete of Employee nulls
update of Customer cascades
Create table Item (Order_Ref integer not null, Product_Ref integer not null, amount integer not null default 1, unique(Order_Id, Product_Ref), foreign key (Product_Ref) references Product(ID)
/*amount – количество единиц товара*/
Create table Product (ID integer not null primary key, name char(30), price decimal not null check(price>0), type char(10) not null)