Реляционные базы данных

advertisement
АРХИТЕКТУРА
ИНФОРМАЦИОННЫХ СИСТЕМ
ЛЕКЦИЯ 8.
РЕЛЯЦИОННЫЕ БАЗЫ ДАННЫХ
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА
• Б. Я. Советов, А. И. Водяхо, В. А. Дубенецкий, В. В.
Цехановский. Архитектура информационных систем:
учебник для студ. учреждений высш. проф. образования. М. : Издательский центр «Академия», 2012.
• А.В. Данилин, А.И. Слюсаренко. Архитектура предприятия.
М: ИНТУИТ, 2007 http://www.intuit.ru/department/itmngt/entarc/
РЕЛЯЦИОННЫЕ БАЗЫ ДАННЫХ
(ТЕОРИЯ)
Типы данных
• Числовые типы: целые и вещественные
• Строковые типы
• Дата, время
Домены – множества, состоящие из элементов
одного типа данных и определяющие область
значений для свойства некоторого объекта
предметной области
• Множество всех названий улиц города
• Множество всех телефонных номеров организации
РЕЛЯЦИОННЫЕ БАЗЫ ДАННЫХ
(ТЕОРИЯ)
Атрибуты – свойства объектов предметной
области, представленных в реляционной
БД и имеющих заданное имя
• Атрибут «Фамилия» определяет свойство работника
предприятия
• Атрибут «Фамилия» имеет строковый тип данных
• Домен фамилий ограничивает значение этого
атрибута
ПОНЯТИЯ РЕЛЯЦИОННЫХ БАЗ
ДАННЫХ
Кортеж – элемент отношения (запись или строка таблицы)
Отношение – описание таблицы с помощью столбцов
(атрибутов) и строк (кортежей )
Степень отношения – количество столбцов таблицы
Кардинальное число – количество кортежей отношения
Схема отношения – перечень имен столбцов таблицы
(атрибутов отношения)
ТРЕБОВАНИЯ К РЕЛЯЦИОННЫМ
БАЗАМ ДАННЫХ
Имя столбца уникально в границах таблицы
На пересечении строки и столбца находится только одно
значение (многозначные атрибуты не допускаются)
В отношении не может быть повторяющихся строк
Первичный ключ – столбец или группа столбцов,
однозначно определяющих каждую строку
ТИПЫ ТАБЛИЦ
Базовые таблицы – таблицы, постоянно хранимые
в БД (должны иметь первичный ключ)
Динамические таблицы используются при
промежуточных вычислениях и имеют
ограниченный срок жизни
Представления (views) предназначены для
сокрытия содержимого базовых таблиц от
пользователя
РЕЛЯЦИОННАЯ АЛГЕБРА
УНАРНЫЕ ОПЕРАЦИИ
• Выборка R2 = σp(R1)
ID
Фамилия
Имя
Отчество
Пол
Оклад
1
Иванов
Петр
Сергеевич
М
35800
2
Петрова
Лидия
Ивановна
Ж
33670
3
Сергеев
Иван
Петрович
М
36200
4
Семенова
Елена
Борисовна
Ж
35700
5
Трофимов
Дмитрий
Андреевич
М
33100
• Оклады2 = σОклад > 35000(Оклады1)
ID
Фамилия
Имя
Отчество
Пол
Оклад
1
Иванов
Петр
Сергеевич
М
35800
3
Сергеев
Иван
Петрович
М
36200
4
Семенова
Елена
Борисовна
Ж
35700
РЕЛЯЦИОННАЯ АЛГЕБРА
УНАРНЫЕ ОПЕРАЦИИ
• Проекция R2 = Πf1, f2, ..., fn(R1)
ID
Фамилия
Имя
Отчество
Пол
Оклад
1
Иванов
Петр
Сергеевич
М
35800
2
Петрова
Лидия
Ивановна
Ж
33670
3
Сергеев
Иван
Петрович
М
36200
4
Семенова
Елена
Борисовна
Ж
35700
5
Трофимов
Дмитрий
Андреевич
М
33100
• Оклады2 = ΠФамилия, Имя, Отчество, Оклад (Оклады1)
Фамилия
Имя
Отчество
Оклад
Иванов
Петр
Сергеевич
35800
Петрова
Лидия
Ивановна
33670
Сергеев
Иван
Петрович
36200
Семенова
Елена
Борисовна
35700
Трофимов
Дмитрий
Андреевич
33100
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Объединение R = R1  R2
ID
Фамилия
Имя
Отчество
Пол
Оклад
1
Иванов
Петр
Сергеевич
М
35800
2
Петрова
Лидия
Ивановна
Ж
33670
3
Сергеев
Иван
Петрович
М
36200
4
Семенова
Елена
Борисовна
Ж
35700
5
Трофимов
Дмитрий
Андреевич
М
33100
ID
Фамилия
Имя
Отчество
Пол
Оклад
1
Сидоров
Иван
Михайлович
М
32100
2
Скворцов
Никита
Андреевич
М
33400
3
Семенова
Елена
Борисовна
Ж
35700
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Фамилия = ΠФамилия(Сотрудники 1)  ΠФамилия(Сотрудники2 )
Фамилия
Иванов
Петрова
Сергеев
Семенова
Трофимов
Сидоров
Скворцов
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Разность R = R1 – R2
• Фамилия = ΠФамилия(Сотрудники 1) – ΠФамилия(Сотрудники2 )
Фамилия
Иванов
Петрова
Сергеев
Трофимов
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Пересечение R = R1  R2 = R1 – (R1 – R2)
• Фамилия = ΠФамилия(Сотрудники 1)  ΠФамилия(Сотрудники2 )
Фамилия
Семенова
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Декартово произведение R = R1  R2
Таб №
Фамилия
Имя
Отчество
203
Иванов
Петр
Сергеевич
204
Петрова
Лидия
Ивановна
212
Сергеев
Иван
Петрович
Таб №
Оклад
Дата
203
35800
29.03.13
204
33670
29.03.13
212
36200
29.03.13
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Зарплата сотрудников = Сотрудники  Зарплата
Таб №
Фамилия
Имя
Отчество
Таб №
Оклад
Дата
203
Иванов
Петр
Сергеевич
203
35800
29.03.13
203
Иванов
Петр
Сергеевич
204
33670
29.03.13
203
Иванов
Петр
Сергеевич
212
36200
29.03.13
204
Петрова
Лидия
Ивановна
203
35800
29.03.13
204
Петрова
Лидия
Ивановна
204
33670
29.03.13
204
Петрова
Лидия
Ивановна
212
36200
29.03.13
212
Сергеев
Иван
Петрович
203
35800
29.03.13
212
Сергеев
Иван
Петрович
204
33670
29.03.13
212
Сергеев
Иван
Петрович
212
36200
29.03.13
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Зарплата сотрудников = σТабномер1 = Табномер2(Сотрудники  Зарплата)
Таб №
Фамилия
Имя
Отчество
Таб №
Оклад
Дата
203
Иванов
Петр
Сергеевич
203
35800
29.03.13
204
Петрова
Лидия
Ивановна
204
33670
29.03.13
212
Сергеев
Иван
Петрович
212
36200
29.03.13
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Тета-соединение R1.ai θ R2.bi
• где операция – θ = {<, >, =, ≠, ≤, ≥}
• Зарплата сотрудников = σТабномер1 = Табномер2(Сотрудники  Зарплата)
• Сотрудники.Табномер1 = Зарплата. Табномер2
• Зарплата сотрудников =
• Сотрудники  (Сотрудники.Табномер1 = Зарплата. Табномер2) Зарплата
• http://citforum.ru/database/advanced_intro/62.shtml
• левое внешнее соединение
• правое внешнее соединение
РЕЛЯЦИОННАЯ АЛГЕБРА
БИНАРНЫЕ ОПЕРАЦИИ
• Деление R = R1  R2
Абонент1
Абонент2
Номер телефона
4450912
3435607
3435607
3561408
2230801
5443408
1571609
5443408
Абонент1
4450912
1571609
ЯЗЫК SQL
• SEQUEL (Structured English Query Language,
структурированный английский язык для
запросов)
• SQL (Structured Query Language,
структурированный язык запросов)
СТАНДАРТЫ ЯЗЫКА SQL
1986
• SQL-86 Первый вариант стандарта, принятый институтом ANSI и одобренный ISO в 1987 году.
1989
• SQL-89 Немного доработанный вариант предыдущего стандарта.
1992
• SQL-92 Значительные изменения.
1999
• SQL:1999 Добавлена поддержка регулярных выражений, рекурсивных запросов, поддержка
триггеров, базовые процедурные расширения, нескалярные типы данных и некоторые
объектно-ориентированные возможности.
2003
• SQL:2003 Введены расширения для работы с XML-данными, оконные функции (применяемые
для работы с OLAP-базами данных), генераторы последовательностей и основанные на них
типы данных.
2006
• SQL:2006 Функциональность работы с XML-данными значительно расширена. Появилась
возможность совместно использовать в запросах SQL и XQuery.
2008
• SQL:2008 Улучшены возможности оконных функций, устранены некоторые неоднозначности
стандарта SQL:2003.
ДИАЛЕКТЫ SQL
SQLpl (DB2)
PL/SQL (Oracle)
PL/pgSQL (PostgreSQL)
Transact-SQL (MS SQL Server, Sybase)
…
СИНТАКСИЧЕСКИЕ КОНСТРУКЦИИ
SQL
предложения
идентификаторы (имена)
константы
операторы
зарезервированные и ключевые слова
ИДЕНТИФИКАТОРЫ
Идентификаторы — это пользовательские или
системные имена объектов баз данных
Присваиваются базам данных, таблицам,
ограничениям и правилам в таблице, столбцам
таблицы, представлениям, процедурам и т. п.
Идентификатор объекта создается при
определении объекта
ИДЕНТИФИКАТОРЫ
Обычные
идентификаторы
• от 1 до 128 символов
• Содержит буквы, цифры, @, $, #, _
• Начинается с буквы, @, #, _
• Примеры: TableX, KeyCol
Идентификаторы
с разделителем
• от 1 до 128 символов
• Заключаются в двойные кавычки или
квадратные скобки
• Примеры: [My Table], [order]
КОНСТАНТЫ
Типы констант
Пример
Символьные строки
'The level for job_id: %d should be between %d
and %d.'
Строки в Юникоде
‘Строка’
Константы двоичных
строк
0x69048AEFDD010E
Константы bit
0 или 1
Константы datetime
'April 15, 2013‘, '04/15/13‘, '14:30:24‘
Константы integer
3014
Константы decimal
3.1415
Константы float и real
10.5E4
Константы money
$1024.34
ЗНАЧЕНИЕ NULL
• Значение NULL указывает на то, что значение неизвестно. Оно
отличается от пустого или нулевого значения.
• Сравнения между двумя значениями NULL или между значением NULL
и каким-либо иным значением возвращают неизвестную величину,
так как значение каждого из значений NULL неизвестно
AND
TRUE
NULL
FALSE
TRUE
TRUE
UNKNOWN
FALSE
NULL
UNKNOWN
UNKNOWN
FALSE
FALSE
FALSE
FALSE
FALSE
OR
TRUE
NULL
FALSE
TRUE
TRUE
TRUE
TRUE
NULL
TRUE
UNKNOWN
UNKNOWN
FALSE
TRUE
UNKNOWN
FALSE
ОПЕРАТОРЫ
Арифметические операторы
(+, -, *, /, %)
Логические операторы
(ALL, AND, ANY, BETWEEN, EXISTS, IN,
LIKE, NOT, OR, SOME)
Оператор присваивания (=)
Оператор разрешения области (::)
Битовые операторы (&, |, ^)
Оператор объединения строк (+)
Операторы сравнения
(=, >, <, >=, <=, <>, !=, !<, !>)
Унарные операторы (+, -, ~)
ПРИОРИТЕТ ОПЕРАТОРОВ
Уровень
•Операторы
1
•~ (побитовое НЕ)
2
•* (умножение), / (деление), % (остаток от деления)
3
•+(положительное), -(отрицательное), +(сложение), (+ объединение), (вычитание), & (побитовое И), ^ (побитовое исключающее ИЛИ),
|(побитовое ИЛИ)
4
•=, >, <, >=, <=, <>, !=, !>, !< (операторы сравнения)
5
•NOT
6
•AND
7
•ALL, ANY, BETWEEN, IN, LIKE, OR, SOME
8
•= (присваивание)
ТИПЫ ДАННЫХ
Целые числа
(bigint, bit, decimal, int, money,
numeric, smallint, smallmoney,
tinyint)
Действительные числа
(float, real)
Дата и время
(datetime, smalldatetime, date,
time)
Символьные строки
(char, varchar, text)
Символьные строки в Юникоде
(nchar, ntext, nvarchar)
Двоичные данные
(binary, varbinary, image)
Прочие типы данных (xml)
ФУНКЦИИ
Статистические функции AVG(), COUNT(), MAX(), MIN(), SUM()
Ранжирующие функции
RANK(), ROW_NUMBER()
Скалярные функции
SYSDATETIME(), DAY(), MONTH(), YEAR(),
ISDATE()
ABS(), LOG(), LOG10(), POWER(), SQRT(),
ROUND()
LOWER(), UPPER(), SUBSTRING()
ПРЕДЛОЖЕНИЯ
Предложения манипуляции данными (Data
Manipulation Language, DML)
Предложения определения данных (Data
Definition Language, DDL)
Предложения определения доступа к
данным (Data Control Language, DCL)
ОПЕРАТОР SELECT
• SELECT [ ALL | DISTINCT ] [TOP ( expression ) [PERCENT]]
• { * | { table_name | view_name }. * | { [ { table_name |
view_name}. ] { column_name } | expression [ [ AS ]
column_alias ] } } [,...n]
• [ INTO new_table ]
• [ FROM { <table_source> } [ ,...n ] ]
• [ WHERE <search_condition> ]
• [ <GROUP BY> ]
• [ HAVING < search_condition > ]
• [ ORDER BY { order_by_expression | column_position [ ASC |
DESC ] } [ ,...n ] ]
• [COMPUTE{{AVG | COUNT | MAX | MIN | SUM}(expression )}
[,...n][BY expression [,...n]]]
ПРИМЕРЫ СИНТАКСИСА SELECT
SELECT * FROM Product ORDER BY Name ASC;
SELECT p.* FROM Product AS p ORDER BY Name ASC;
SELECT Name, ProductNumber, ListPrice AS Price FROM Product
ORDER BY Name ASC;
SELECT Name, ProductNumber, ListPrice AS Price
FROM Product WHERE ProductLine = 'R' AND DaysToManufacture
< 4 ORDER BY Name ASC;
ХРАНИМЫЕ ПРОЦЕДУРЫ
Хранимая процедура – SQL-запрос, выполняемый
на стороне сервера и имеющий параметры
(аргументы)
• Хранимые процедуры не возвращают значения
результата
• Обеспечивают удобный и эффективный механизм
безопасности
• Откомпилированные хранимые процедуры и их исходные
тексты содержатся в базе данных
ОПИСАНИЯ ХРАНИМОЙ
ПРОЦЕДУРЫ
• CREATE { PROC | PROCEDURE } procedure_name [;
number]
•
•
•
•
•
•
•
[ { @parameter data_type }
[ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH [ RECOMPILE ] [ ,...n ] ]
[ FOR REPLICATION ]
AS { <sql_statement> [;][ ...n ] }
[;]
• <sql_statement> ::=
• { [ BEGIN ] statements [ END ] }
ВЫВОД ИНФОРМАЦИИ О
ХРАНИМОЙ ПРОЦЕДУРЕ
• EXEC SP_HELPTEXT <Имя процедуры>
ИСПОЛНЕНИЕ ХРАНИМОЙ
ПРОЦЕДУРЫ
• EXEC <Имя процедуры> [<Параметр1>,
<Параметр2>,…]
ПРИМЕР
• CREATE PROCEDURE СрБАЛЛ
•
•
•
•
•
•
@X Real
AS
SELECT *
FROM Студенты
WHERE
(Оценка1 + Оценка2 + Оценка3)/3>@X
• EXEC СрБАЛЛ 4
ФУНКЦИИ
Пользовательские функции похожи на
хранимые процедуры, отличие – возвращают
значение
Скалярные функции – функции, которые
возвращают число или текст, то есть одно или
несколько значений
Табличные функции – функции, которые
возвращают результат в виде таблицы
СОЗДАНИЕ ОПИСАНИЯ СКАЛЯРНОЙ
ФУНКЦИИ
•
•
•
•
•
•
CREATE FUNCTION function_name
( [ { @parameter_name [ AS ] parameter_data_type
[ = default ] [ READONLY ] } [ ,...n ]
])
RETURNS return_data_type
[ AS ]
• BEGIN
• function_body
• RETURN scalar_expression
• END [ ; ]
СОЗДАНИЕ ОПИСАНИЯ
ТАБЛИЧНОЙ ФУНКЦИИ
• CREATE FUNCTION function_name
• ( [ { @parameter_name [ AS ] parameter_data_type [ =default ] [
READONLY ] } [ ,...n ]
• ])
• RETURNS TABLE
• [ AS ]
• RETURN [ ( ] select_stmt [ ) ] [ ; ]
• @return_variable TABLE <table_type_definition>
• [ AS ]
• BEGIN
• function_body
• RETURN
• END [ ; ]
ПРИМЕР (СКАЛЯРНАЯ ФУНКЦИЯ)
•
•
•
•
•
CREATE FUNCTION Среднее
(@X1 Int,@X2 Int,@X3 Int)
RETURNS Real
AS
BEGIN
• DECLARE @Res Real
• @Res =(@X1+@Х2+@Х3)/3
• RETURN @Res
• END
ПРИМЕР (ТАБЛИЧНАЯ ФУНКЦИЯ)
• CREATE FUNCTION Возраст (@CurDate Date)
•
•
•
•
•
RETURNS TABLE
AS
RETURN (SELECT ФИО, [Дата рождения],
Возраст = DATEDIFF(yy, [Дата рождения], @CurDate)
FROM Студенты)
• SELECT Возраст (‘12/17/2007’)
Download