Весь конспект.
Отношение
Отношение – подмножество декартова произведения. При этом множества называются доменами.
Отношения удобно представлять в виде таблиц. Строки таблицы соответствуют кортежам. Каждая строка представляет какую-либо сущность.
Внутри каждого отношения атрибуты должны быть разными. А внутри объекта могут и повторяться.
Атрибут, идентифицирующий кортеж – ключ. Внешний ключ – значение атрибута, по которому удается восстановить связь с родительской таблицей, при условии, что значения в родительской таблице и дочерней – совпадают.
В реляционной БД отсутствует понятие группового отношения. Ключ просто дублируется для каждой сущности.
Свойства отношений:
- Отсутствие дублированных записей. Решается наличием ключа.
- Отсутствие упорядоченности кортежей. (Порядок не влияет на отношение)
- Отсутствует порядок атрибутов (столбцов) (Т.е. порядок не влияет)
- Значение атрибута неделимо (атомарно)
Функциональной зависимостью называется выражение вида: «Если 2 кортежа согласуются по атрибутам , то также согласуются и по еще одному атрибуту.»
Формально: А1,А2,А3, .. Аn -> B. (Функционально определяет)
Говорят, что множество атрибутов А1,А2, .. Аn - ключ отношения, если
- Функционально определяет все остальные атрибуты
- Наименьшее по включению
Суперключ – множество всех атрибутов, содержащих ключ.
Функциональная зависимость А1,А2, .. Аn->B1,.. Bn называется
- Тривиальной, если B подмножество А
- Нетривиальной – если частично пересекаются
- Полностью нетривиальной, если не пересекаются
Пусть А={A1,…An} – множество атрибутов, S – множество функциональных зависимостей.
Замыкание – множество атрибутов, что всякое отношение, удовлетворяющее S, что A1,…An->B следует из S.
Обозначается {A1,…An}+
Функц. зависимости транзитивны.
{A1, An }+ Замыкание – это множество всех атрибутов А1, … Аn суперключ этого отношения
Аномалии в схеме реляционной базы:
- Избыточность (несколько раз повторяется инфа)
- Update аномалия – необходимость обнолять инфу в нескольких кортежах.
- Delete аномалия – удаление части может повлиять на другую инфу.
Для устранения аномалий используют правило декомпозиции отношений. (процесс разбиения исходного отношения на два и более).
Существует Нормальная форма Бойса-Кода (BCNF)
Отношение находится в BCNF когда не существует нетривиальной функц.зависимости, такой, что атрибуты – суперключ.
- Отношение в первой нормальной форме, если все атрибуты атомарны.
- Во второй, если он в первой, и каждый неключевой атрибут функц. зависит от ключа, но не зависит ни от какого подмножества ключа.
- В третьей – если он во второй, и не ключевой атрибут зависит нетранзитивно от ключа.
- В BCNF, если в третьей, отсутствуют зависимости атрибутов первичного ключа от неключевых атрибутов.
Физическая модель
- Физические аспекты хранения таблиц в определенных файлах.
- Создание индексов, оптимизирующий скорость выполнения данных.
- Выполнение различных действий над данными при определенных событиях.
Целостность данных:
- Целостность сущностей (для каждого значения должен быть соответствующий ключ в родительском значении)
- Целостность ссылок.
Реляционное исчисление: алгебра и логика.
Основные операции: Добавить, Удалить, Изменить.
Операции обработки отношений:
- Проекция (вертикальное подмножество, без дубликатов)
- Выборка (горизонтальное подмножество)
- Пересечение (отношений)
- Разность
- Соединение
История
1975 – Основание Microsoft
1977 – Software Development… (ныне Oracle)
1986 – Появление технологии «клиент-сервер»
1988 – Первая версия Microsoft SQL Server
И.т.п
Архитектура сервера
Sql Server использует для хранения баз данных набор файлов ОС
- Первичные файлы .mdf
- Вторичные файлы .ndf
- Логи .ldf
При создании БД все её прошлые файлы зануляются.
Таблицы
– наборы страниц с заголовком (имя, связки, указание на другие страницы таблицы). В конце – таблица смещений строк. Всё остальное - поля таблицы.
Windows и SQL
Встроенный пользователь sa – System Administrator.
Клиенты:
SQL Server Management Studio
Команды:
Create Table table_name
( {
|column_name AS computed_column_expression
| ::=[CONSTRAINT constraint_name}
| [{PRIMARY KEY …………..
ЯЗЫК SQL:
Выбор
SELECT FROM
WHERE
Пример:
SELECT * FROM USP WHERE ID=38725
LIKE – символьные поля CHAR NCHAR
Я не понимаю, куда она торопится. Капец. Какой смысл так рассказывать?
Гомоморфный образ группы, в честь победы коммунизма, изоморфен фактор группе по ядру гомоморфизма!
Обновление записей:
UPDATE { имя таблицы} SET {что модифицировать}
{ [FROM набор таблиц источников][WHERE … .. }
--E.g.
Update authors SET authors.au_fname = ‘Annie’ WHERE au_fname = ‘Anne’
Удаление
DELETE [FROM] … [WHERE … ]
E.g. DELETE authors – очищает все строки
DELETE FROM authors WHERE au_lname =’McBadden’
Удалить всю таблицу – TRUNCATE
SELECT * FROM authors ORDER BY au_lname ASC, au_fname ASC
(сортировка по имени и фамилии по возрастанию)
SELECT 1 ‘qq’ –
вывод на экран
Соединения:
INNER JOIN - выбор и объединение строк из 2-х таблиц основываясь на условии совпадения значений некоторых полей строк
LEFT JOIN или LEFT OUTER JOIN – в результате – все строки левой таблицы, даже если в правой нет строк, содержащих значения, удовлетворяющие условию join`a
RIGHT JOIN, RIGHT OUTER JOIN- то же, только наоборот.
FULL JOIN, FULL OUTER JOIN – соединит все строки из обеих таблиц
CROSS JOIN – сочетание всего
Функции:
CAST (expression AS data_type) преобразование
CONVERT ( data_type, expression, [style]) – преобразование
GETDATE() – текущая дата
DATEADD(datepart, number, date) – добавляет дату
DATEDIFF(datepart,startdate,enddate) – разница в единицах datepart
Создание временных таблиц:
#nametable
– локальная таблица временная. Исчезает с прекращением сеанса
##nametable
– глобальная временная таблица.
@ - переменные.
Declare @sql_stmnt varchar(50)
Set @sql_stmnt = ‘select * from people’
Exec(@sql_stmnt)
Условия:
IF логика { } [ELSE { } ]
WHILE bool { } [break] { } [continue]
Курсор – сформированный пользователем табличный объект, откуда можно читать построчно.
DECLARE cursor_name CURSOR
[LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL] [STATIC | DYNAMIC | FAST_FORWARD] |
..
FOR select_statement
.
OPEN - открыть курсор
Движение по курсору командой FETCH
DECLARE CURSOR STIPCUR FOR sname, stip…
EXEC SQL CURSOR STIPCUR
Представления
Представление VIEW – это именованная виртуальная таблица, содержание которой выбирается из других таблиц с помощью запросов.
При изменении значений в таблицах автоматически меняются значения преставления.
Наличие имени у такой таблицы позволяет пользователю выполнять операции с базовыми таблицами.
Базовые таблицы – таблицы которые содержат данные и постоянно находятся на устройствах хранения информации. Представления по сравнению с ними являются более гибкими средствами. Когда СУБД отыскивает в команде ссылку на представление.
СУБД имен 2 возможности реализации представления:
- Если определение представления простое, то система формирует каждую запись по мере необходимости
- Если представление сложное, СУБД сначала выполняет материализацию выполнения, затем система выполняет пользовательские команды.
CREATE VIEWAS select … from … where …
Нельзя UNION объеденения. Нельзя ORDER BY.
Удаление представлений: DROP VIEW
Не должно использовать группировки, условия. Для вставки - любые поля базовой таблицы.
Транзакция
– совокупность действий пользователя. Модуль для выполнения.
- Atomicity – атомарность. Либо все изменения в транзакции, либо ни одного.
- Consistency(постоянство) – после завершения не должна быть нарушена целостность данных.
- Isolation(изолированность) Изменения изолируются от других транзакций.
- Durability(устойчивость) изменения в любом случае, даже если был сбой.
Запуск транзакции:
- Explicit – явная. BEGIN TRANSACTION.
- Autocommit – автоматически после блока команд.
- Implicit – неявная. SET IMPLICIT TRANSACTION ON/OFF
Завершение транзакции:
Конструкция COMMIT
Если ошибка – ROLLBACK возврат к точке отката.
Create functionreturns[as .. ] begin … return .. end
Create fuction … returns table begin … return .. end
Для того, чтобы определить в какой нормальной форме БД — нужно оценить нормальность форм каждой таблицы, а потом взять наименьшую.
1 нормальная форма — в каждой ячейке — неделимое значение.
2 нормальная форма — нет функциональных зависимостей.
3 нормальная форма — нет транзитивных зависимостей.
Промежуток – после Group BY - написать
Having нужное between ### and ###
Триггер
Триггер – процедуры, хранимые в БД. Вызываются автоматически.
Пример
Create table my_table( a int NULL, b int NULL)
Go
ALTER TRIGGER my_trig ON my_table
Функции пользователя: скалярные и возвращающие таблицу.
Create function abcd (@trener varchar (50))
Returns table
As
Return (select treners.fam, vidsporta.namesp
from treners inner join vidsporta on treners.vidsp=vidsporta.vidsp
where treners.fam=@trener)
Вызов функции:
Select * from abcd(‘Филин’)
Фантомы
- Проблема “грязной записи”
- Проблема “грязного чтения” - транзакция пытается читать временные данные, с которыми работает другая параллельная транзакция.
- Проблема повторного чтения – из-за параллельных потоков повторное чтение может привести к другому результату.
- Проблема фантомов — изменение выборки данных другой параллельной транзакцией.
Для реализации разрешения этих проблем необходимо изолировать транзакции друг от друга.
Для уровней изоляции используются блокировки — LOCKs.
Уровни:
- No trashing of data. (Запрещение загрязнения данных) Запрет на параллельное изменение данных.
- No read — Запрет параллельного чтения данных.
- No phantom. Ни изменять, ни вставлять новые данные параллельно.
SERIALIZABLE — никаких проблем, но очень непроизводительно.
Сущности блокировки:
- БД
- Таблица
- Экстент — страницы
- Страница
- Строка
- Диапазон индекса.
Простые блокировки:
- Разделяемые блокировки (Shared)
- Монопольные (Exclusive) (X)
- Update — среднее между S и X
Блокировки намерений:
Всегда на таблицу, никогда на строчку. Очень суровы.
- Разделяемая блокировка намерений IS
- Монопольная блокировка намерений IX
Репликация. Дублирование. Восстановление
Репликация – это процесс, который производит обмен между базами данных, находящихся на одном и том же сервере или на других серверах
Репликация использует метафоры:
Publisher – сервер или группа баз данных, которая отсылает свои данные да другой сервер или в другую базу данных. Содержит публикацию или группы публикаций. Публикация – совокупность одной или более статей, которые посылаются серверу подписчику или бд. Статья – основной модуль репликации и это может быть таблица или подмножество таблицы.
Distributor-сервер, который управляет потоком данных через систему репликации. Этот сервер содержит специализированную БД: Distribution database
Subscriber- сервер или БД, которая получает данные от другого сервера иди другой БД
Виды подписок:
- Push subscription
- Pull subcription
- Distribution db – это системная БД, которая хранится на дистрибуторе и не содержит никаких пользовательских таблиц.
ТОПОЛОГИЯ РЕПЛИКАЦИИ
- Центральный publisher – один сервер исполняет роли publisher и distributor
- центральный Subscriber – обычная топология. Несколько серверов или БД копируют свои данные в центральный сервер в одну или несколько БД.
- Центральный publisher с отдаленным distributor
Репликации:
Snapshot - полный снимок базы.
- Транзакционные – сохраняет снимок базы как сценарий insert,update,delete (используются когда часто изменяются, или нет смысла поддерживать всё-всё)
- Merge – синхронизация баз
Утилиты:
- Snapshot Agent
- LOG READER AGENT – логи.
- Distribution agent
- Merge Agent
GUI
Пишется с помощью API на JavaScript, с помощью ASP.
Виды соединений:
- ODBC – Open DB Connectivity
- OLE DB – буфер обмена например
- ActiveX Data Objects (ADO)
- Borland DB Engine (BDE)
- ADO.NET