
Имена и описания классов сущностей компании по видеопрокату
-
Класс сущности
Описание
Customer
Клиент
Videotape
Видеокассеты в числе проката
Employer
Служащий пункта проката
…
….
Supplier
Поставщик фильмов для видеопроката
Каждый класс сущности имеет определенные атрибуты или свойства, описывающие его характеристики. Эти атрибуты используются для дальнейшего описания. Классов сущностей. Один и тот же атрибут может присутствовать более, чем в одном классе сущности. Например, атрибут Name является атрибутом классов customer и employer.
Имена и описания атрибутов
Атрибут |
Тип |
Область значений |
Описание |
Title |
String |
Без ограничений |
Название фильма |
Name |
String |
30 символов |
Фамилия |
Raiting |
String |
5 символов |
Рейтинг фильма |
DateAquired |
Date |
Месяц, день, число |
День получения видеокассеты |
Address |
Composite |
2 строки из 30 символов 1 строка из двух символов |
Адрес, состоящий из улицы, дома, кода |
==========================================================
ER-модель.
Разработке БД предшествует ознакомление с предметной областью. Во время этого надо сформировать список сущностей, которые будут отражаться в БД. Описать атрибуты этих сущностей, взаимосвязи сущностей. На ER-диаграмме сущность обозначается прямоугольником, и название сущности – существительное. Связь обозначается ромбом, и название связи – глагол.
ER-модель есть концептуальное описание или описание на внешнем уровне БД. Связь между объектами – некоторая связь между ними. В ER – модели связи характеризуются типом или классом. Например, 2 человека могут быть связаны как родитель и ребенок. (связь «родитель – ребенок»), как начальник и подчиненный. (связь»производственные отношения») и т. д. Связь возникает между двумя экземплярами и является экземпляром некоторого типа связи между классами объектов. Тип связи – возможность того, что между двумя сущностями может быть связь (ассоциация). Экземпляр связи отражает факт существования такой связи между двумя сущностями. Например, тип связи «состоит в браке» определен двумя объектами класса сущности «персона». Однако, этот тип связи вовсе не означает, что любой экземпляр класса «персона» состоит в браке с любым другим экземпляром класса «персона».
Основная цель концептуального моделирования состоит в определении связей между двумя сущностями. Концептуальная модель выявляет связи, но не определяет их точное представление.
Экземпляр типа связи состоит из двух или более сущностей, связанных типом связи. Каждому типу связи присущ показатель координальности. Он ограничивает число случаев участия сущности в типе связи. При типе связи 1:1 сущности могут участвовать не более чем в одной связи. При типе связи «один ко многим» та сущность, что выступает в роли «один» может иметь много связанных сущностей (много служащих в одном отделе, но один человек, как правило, владеет одной специальностью).
Класс сущности может обладать ключевым атрибутом. Тогда он называется «сильным классом». Ключевой атрибут не может повторяться в рамках одной таблицы. Сущность может иметь несколько ключевых атрибутов. «Слабый» класс сущности – при отсутствии ключевых атрибутов.
Резюме.
Реальный мир слишком велик, чтобы его можно было отобразить в рамках одной БД или одной модели. Поэтому предметом исследований является часть окружающего мира, которую мы назовем системой.
Окружающий
мир
Система определяет предметную область, которая изучается (анализируется), а затем на базе этого анализа строится модель, которая затем реализуется в виде БД. Например, информационная система. Анализ предметной области должен привести к выделению тех ее объектов, которые будут учитываться при построении ИС. Изучаются характеристики и связи этих объектов. В итоге строится концептуальная модель БД. Эта модель может быть представлена, например, в виде ER – диаграммы (модели), но может содержаться (быть описана) в любом другом наглядном виде. Далее на базе этой модели разрабатывается логическая схема БД. Логический уровень затем служит основой либо для разработки нового внутреннего (физического) уровня, и тогда речь идет о создании новой БД, либо разработчики приходят к выводу использовать уже имеющиеся СУБД, если построенная модель данных в нее вписывается.
===================================================================
Элементы реляционной алгебры
Реляционная алгебра – алгебра обработки таблицы.
Операторы:
Выборка – отбор всех строк таблицы, удовлетворяющих условию отбора.
Табл.1 Выборка σ («сигма»)
A |
B |
C |
1 |
1 |
1 |
2 |
2 |
2 |
3 |
3 |
3 |
4 |
2 |
2 |
A |
B |
C |
2 |
2 |
2 |
4 |
2 |
2 |
Декартово произведение. В результате создается таблица, содержащая строки для `каждой комбинации строки левого операнда со строкой из правого операнда.
Табл.1 Табл.2
A |
B |
C |
||
1 |
1 |
1 |
||
2 |
2 |
2 |
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
21 |
22 |
23 |
A |
A |
A |
B |
B |
B |
C |
C |
C |
Таблица-результат
A |
B |
C |
21 |
22 |
23 |
1 |
1 |
1 |
A |
A |
A |
1 |
1 |
1 |
B |
B |
B |
1 |
1 |
1 |
C |
C |
C |
2 |
2 |
2 |
A |
A |
A |
2 |
2 |
2 |
B |
B |
B |
2 |
2 |
2 |
C |
C |
C |
(Декартово произведение табл.1 и табл.2)
Число строк результирующей таблицы равно произведению строк левой и правой таблиц.
Соединение. Реляционная операция умножения, объединяющая таблицы, основываясь на условии соединения. В результирующей таблице содержится строка для каждой пары строк исходных таблиц, для которых условия соединения – истина.
Табл.1 Табл.2
A |
B |
C |
1 |
1 |
1 |
2 |
2 |
2 |
A |
22 |
23 |
1 |
A |
A |
2 |
B |
B |
2 |
C |
C |
Таблица-результат
A |
B |
C |
22 |
23 |
1 |
1 |
1 |
A |
A |
2 |
2 |
2 |
B |
B |
2 |
2 |
2 |
C |
C |

A
(соединение по атрибуту А)
Проекция. Результирующая таблица состоит из отобранных столбцов исходной таблицы. Число строк результирующей таблицы может быть меньше, чем в исходной таблице, в результате удаления строк-дубликатов.
Табл.1 πB,C Табл.1
A |
B |
C |
1 |
1 |
1 |
2 |
2 |
2 |
3 |
2 |
1 |
4 |
2 |
2 |
B |
C |
1 |
1 |
2 |
2 |
2 |
1 |
Лингвистические (языковые) средства СУБД
Для чего нужны эти средства?
Для описания схемы БД при разработке ее структуры;
Для управления операциями с данными.
Существуют ряд языков для работы с БД. Стандартом де факто среди языков БД является язык SQL. Его первая версия была разработана в 1970г. на фирме IBM. Сначала он назывался SEQuEL, а сейчас SQL (Structured Query Language). На него есть стандарт ANSI/ISO.
Основные операторы языка SQL.
Операторы по созданию, изменению, уничтожению БД и таблиц внутри нее.
Оператор |
Описание |
CREATE TABLE |
Добавление новой таблицы к БД |
DROP TABLE |
Удаление таблицы из БД |
ALTER TABLE |
Изменение структуры имеющейся таблицы |
CREATE VIEW |
Добавление нового представления к БД |
DROP VIEW |
Удаление представления |
CREATE INDEX |
Создание нового индекса |
DROP INDEX |
Удаление существующего индекса |
Операторы, позволяющие работать с данными.
Оператор |
Описание |
SELECT |
Выбор данных |
INSERT |
Вставка данных |
DELETE |
Удаление данных |
UPDATE |
Обновление данных |
Операторы для управления изменениями, выполняемыми операторами из предыдущей таблицы.
Оператор |
Описание |
COMMIT |
Завершение транзакции и сохранение изменений в БД |
ROLLBACK |
Откат транзакции и отмена изменений в БД |
SET TRANSACTION |
Установка параметров доступа в текущей транзакции |
Операторы администрирования (работа с привилегиями)
Оператор |
Описание |
GRANT |
Присвоение привилегии |
REVOKE |
Отмена привилегии |
Пример
SELECT*FROM Orders
WHERE Order.id>270
Каждый оператор SQL начинается с ключевого слова, которое определяет, что он делает. В операторе содержатся предложения, включающие сведения о том, над какими данными проводится операция.
Каждое предложение начинается со слова такого, как FROM, WHERE и др. Структура предложения зависит от его типа. Оно может содержать имена полей или таблиц, а также другие ключевые слова, константы или выражения.
Выбор данных (SELECT).
Это один из наиболее важных операторов языка SQL. Применяется для выборки данных.
SELECT столбцы(или*) FROM отношение(я)
[WHERE ограничение(я)]
[ORDER BY столбец]
При выборке данных используется как минимум 2 ключевых слова - SELECT и FROM. Остальные ключевые слова не обязательны, что показано их заключением в квадратном скобки[].
За ключевым словом SELECT следует перечень полей (столбцов), которые будут включены в результат или результирующую таблицу.
‘*’ означает, что в набор попадают все полю таблицы.
Если выбор данных осуществляется из нескольких таблиц одновременно, и при этом выбираются одноименные поля, то после имени поля надо указать имя таблицы.
SELECT Поставщики.наименов_компании,
Клиенты.наименование компании
Предложение FROM.
Для указания имен таблиц, из которых выбираются записи, применяется FROM.
SELECT*
FROM Поставщики
В итоге возвратится полностью таблица «Поставщики» (все поля из таблицы «Поставщики»).
Предложение WHERE.
WHERE выражение1 [{AND|OR выражение2 […]}]
[] - не обязательно;
{} – может повторяться несколько раз;
| - или;
Пример1:
SELECT*
FROM Поставщики
WHERE Адрес_город=”Москва” AND Дата_договора=1998
Пример2:
SELECT наименование, цена
FROM товар
WHERE скидка IS NOT NULL
IS NOT NULL означает, что соответствующий столбец не должен иметь пустых значений. Сам столбец «скидка» в результат не войдет.
В предложении WHERE могут использоваться как простые, так и специальные операторы сравнения
Оператор |
Описание |
>, <, >=, <=, =, <> |
Простые операторы сравнения |
All |
Применяется совместно с операторами сравнения при сравнении со списком значений |
BETWEEN |
Применяется при проверке нахождения значения внутри заданного интервала (включая границы) |
IN |
Применяется для проверки нахождения значения в списке |
LIKE |
Применяется для проверки соответствующего значений, заданных в маске |
SELECT*
FROM Товар
WHERE наименование BETWEEN ‘X’ AND ‘H’;
Здесь выбирается наименование товара, начинающегося с букв от ‘X’ до ‘H’.
SELECT наименование, цена
FROM Товар
WHERE наименование LIKE ‘%гидро’
Выбирается из таблицы «Товар» 2 столбца – «наименование» и «цена», в наименовании содержится подстрока ‘гидро’.
Предложение ORDER BY.
Это предложение является необязательным и применяется для сортировки результирующего набора данных по одному или нескольким столбцам. Для определения направления сортировки используются ключевые слова ASC и DESC.
ORDER столбец1 [{ASC|DESC}] [столбец2]
[{ASC|DESC}] […]
ASC – сортировка по возрастанию;
DESC – сортировка по убыванию.
Пример:
SELECT*
FROM Товар
WHERE наименование BETWEEN ‘Х’ AND ‘Н’
ORDER BY цена
Первым столбцом будет цена.
Связывание таблиц.
Одна из возможностей извлекать данные более чем из одной таблицы – связать таблицы по общему полю.
SELECT наименование_продукта, категория_продукта
FROM Продукт, Категория
WHERE Продукт.категория_номер=Категория.категория_номер.
По этому запросу будут выданы данные какой категории принадлежит данный продукт. Ограничение WHERE указывает, что из связываемых таблиц извлекаются только те строки, в которых атрибуты категория_номер одинаковы.
SELECT наименование_продукта, категория_продукта
FROM
В итоге получаем Декартово произведение, где строка первой таблицы связывается по очереди с каждой строкой второй таблицы. Таким образом, если в первой таблице k1 строк, то во второй k2 строк, то в результате получается таблица, содержащая k1*k2 строк. Количество столбцов в этой таблице n1+n2 , где n1 – количество столбцов в первой таблице, а n2 – количество столбцов во второй таблице.
Можно использовать следующие операторы:
INNER JOIN – внутреннее соединение.
В результирующем наборе при этом содержатся те строки, у которых значения в связанных полях совпадают.
OUTER JOIN
Пример:
SELECT наименование_продукта, категория_продукта
FROM Продукт LEFT OUTER JOIN Категория
WHERE Продукт.категория_номер=Категория.категория_номер
Предложение GROUP BY.
GROUP BY {столбец}[, …]
Для вычисления суммарного значения на основе данных одной или нескольких таблиц используется предложение GROUP BY. В этом случае результат будет сгруппирован по одинаковым значениям атрибута группировки. Например, сумму баллов, полученную абитуриентом на экзаменах, можно получить с помощью запроса
SELECT DISTINCTROW
Оценки, номер_абитуриента, Sum(Оценки, полученный_балл), AS Sum Полученный_балл
FROM Оценки
GROUP BY Оценки, номер_абитуриента
Предложение GROUP BY сообщает системе, что надо разбить заданное отношение на группу строк (картежей) с одинаковыми значениями атрибута номер_абитуриента.
В результате для каждой группы будет возвращена строка, представляющая суммарный балл с определенным значением номера абитуриента. В первой строке надо указать атрибут, по которому будет производиться группировка. При использовании функций (в данном случае суммирования - Sum) не разрешается в первой строке оператора (т.е. предложении SELECT) указывать имена атрибутов, не входящих в предложение GROUP BY. В одном операторе можно указывать несколько функций.
Например:
SELECT DISTINCTROW Оценки, номер_абитуриента, Sum (Оценки, получ_баллы), AS Sum_получ_баллы
FROM Оценки
GROUP BY Оценки, номер_абитуриента
HAVING Sum(Оценки, полученный балл)>12
Ключевые слова ALL и DISTING.
Эти ключевые слова управляют выводом одинаковых строк в результирующей таблице.
DISTING указывает, что строки должны быть уникальны.
ALL – надо возвращать все строки, в том числе и одинаковые.
Вложенные последовательности запросов.
SELECT номер_клиента
FROM счета_клиентов
WHERE номер_счета IN
( SELECT номер_счета
FROM счета
WHERE филиал=”Бауманский” )
Здесь будет выбрано множество строк, состоящих из номеров_счетов таблицы «счета», которые обрабатывает филиал «Бауманский».
Если рассматриваемый номер_счета есть в указанном множестве, то будет возвращен номер_клиента этого кортежа.
Счета Счета_клиентов
номер_счета |
филиал |
||
5-16 |
Бауманский |
||
4-98 |
Бауманский |
||
7-21 |
Любленский |
||
3-11 |
Центральный |
||
|
|
|
|
|
|
||
|
|
||
|
|
№_клиента |
№_счета |
15 |
4-98 |
20 |
7-21 |
25 |
3-11 |
4-98 |
Бауманский |
5-16 |
Бауманский |
Затем из таблицы «Счета_клиентов» выбираются номера клиентов, у которых номер_счета либо 4-98, либо 5-16.
Итог выборки – 15.
Существуют определенные типы запросов, которые лучше реализовывать с помощью подзапросов. Преимущественно это так называемые проверки существования. Предположим, что надо получить данные о клиентах, которые не имеют счетов.
SELECT *
FROM Клиенты
WHERE номер_клиента NOT IN
(SELECT №_клиентов
FROM Счета_клиентов)
Клиенты |
адрес |
15 |
… |
20 |
… |
18 |
… |
35 |
… |
№_клиента |
№_счета |
15 |
4 |
20 |
7-21 |
25 |
3-11 |
Если будет возвращено пустое множество, то это означает, что у каждого клиента есть хотя бы 1 счет.
========================================================
Модификация данных.
Оператор UPDATE (Коррекция).
Для изменения значений в одном или нескольких столбцах таблицы можно использовать оператор UPDATE.
UPDATE таблица
SET столбец1=выражение1 [, столбец2=выражение2]
[WHERE условие]
Пример:
UPDATE Счет
SET Баланс=Баланс+100.0
WHERE Баланс>0
В таблице «Счет» все значения в столбце «Баланс» увеличиваются на 100, если эти значения положительны
Оператор DELETE.
Используется для удаления строк из таблиц.
Общий вид:
DELETE
FROM таблица
[WHERE условие]
Предложение WHERE не является обязательным, но если его нет, то будут удалены все строки таблицы. Полезно использовать оператор SELECT с тем же синтаксисом, что и DELETE, чтобы предварительно проверить, какие записи будут удалены.
Оператор INSERT.
Оператор добавляет в таблицу строки и имеет синтаксис:
INSERT INTO
([список столбцов]
{VALUES({DEFAULT | NULL | выражение})}
[, …])
Создание таблиц.
Оператор CREATE TABLE.
Чтобы из таблицы извлекать данные, надо, чтобы таблица существовала в БД. Напомним, что таблица – это отношение.
Создание отношений производится оператором CREATE TABLE.
CREATE TABLE Таблица
(стб1 тип1 [(размер)]
[, …])
Пример:
CREATE TABLE Заказ
(наименование_заказа char, номер_заказа integer(6) Not Null Primary Key, ФИО_исполнителя char(20), сумма_заказа integer(4))
Создается таблица «Заказ», причем атрибут «номер_заказа» является ключевым и его значение должно быть обязательно задано.
Нельзя использовать этот оператор несколько раз для одной и той же таблицы. Если после ее создания необходимо внести какие-то изменения, то они вносятся с помощбю оператора ALTER.
Оператор ALTER TABLE.
Этот оператор предназначен для изменения структуры существующей таблицы. Применяя его, можно добавить или удалить поле к уже существующей таблице.
Добавление поля.
ALTER TABLE Таблица ADD[column] столбец тип_столбца[(размер)]
Удаление поля.
ALTER TABLE Таблица DROP [column] столбец
Дополнительные ограничения.
Для того, чтобы указать, что данное поле должно иметь определенное значение в каждой строке, необходимо указывать ограничение NOT NULL. Это ограничение можно накладывать на любой столбец таблицы.
Для указания того факта, что атрибут (столбец) является первичным ключом, указывается ограничение PRIMARY KEY (первичный ключ). Данное ограничение не прикрепляется к отдельному столбцу, а относится ко всей таблице в целом. Первичный к4люч может распространяться более, чем на один столбец таблицы, и тогда это выглядит так:
CREATE TABLE Заказ
(номер_заказа Not Null, цена Not Null, Primary Key(номер_товара,цена))
На отдельные атрибуты могут накладываться семантические ограничения, обеспечивающие целостность данных. В таких случаях можно использовать предложение CHECK, чтобы ограничить множество допустимых значений определенного столбца.
Пример:
CREATE TABLE Товар(номер_товара integer(5) Not Null Primary Key, категория_товара char(20)CHECK(категория товара=’А’ OR категория_товара=’Д’))
При таком задании атрибут категория_товара может иметь значение либо ‘А’, либо ’Д’. При любой попытке ввести другое значение будет выдана диагностика и ввод не состоится.
Представления.
Представление – это логическое отношение, содержимое которого является производным от уже существующих отношений. Отношение – первичная или базовая таблица, а представление – это таблица, сформированная на базе отношений.
Понятие представления введено в языке SQL для того, чтобы избежать дублирования данных.