Конспект АБД

[ SQL ]

26 Jun 2012

Весь конспект.

Отношение

Отношение – подмножество декартова произведения. При этом множества называются доменами.

Отношения удобно представлять в виде таблиц. Строки таблицы соответствуют кортежам. Каждая строка представляет какую-либо сущность.

Внутри каждого отношения атрибуты должны быть разными. А внутри объекта могут и повторяться.

Атрибут, идентифицирующий кортеж – ключ. Внешний ключ – значение атрибута, по которому удается восстановить связь с родительской таблицей, при условии, что значения в родительской таблице и дочерней – совпадают.

В реляционной БД отсутствует понятие группового отношения. Ключ просто дублируется для каждой сущности.

Свойства отношений:

  • Отсутствие дублированных записей. Решается наличием ключа.
  • Отсутствие упорядоченности кортежей. (Порядок не влияет на отношение)
  • Отсутствует порядок атрибутов (столбцов) (Т.е. порядок не влияет)
  • Значение атрибута неделимо (атомарно)

Функциональной зависимостью называется выражение вида: «Если 2 кортежа согласуются по атрибутам , то также согласуются и по еще одному атрибуту.»

Формально: А123, .. Аn -> B. (Функционально определяет)

Говорят, что множество атрибутов А12, .. Аn - ключ отношения, если

  • Функционально определяет все остальные атрибуты
  • Наименьшее по включению

Суперключ – множество всех атрибутов, содержащих ключ.

Функциональная зависимость А12, .. Аn->B1,.. Bn называется

  • Тривиальной, если B подмножество А
  • Нетривиальной – если частично пересекаются
  • Полностью нетривиальной, если не пересекаются

Пусть А={A1,…An} – множество атрибутов, S – множество функциональных зависимостей.

Замыкание – множество атрибутов, что всякое отношение, удовлетворяющее S, что A1,…An->B следует из S.

Обозначается {A1,…An}+

Функц. зависимости транзитивны.

{A1, An }+ Замыкание – это множество всех атрибутов А1, … Аn суперключ этого отношения

Аномалии в схеме реляционной базы:

  • Избыточность (несколько раз повторяется инфа)
  • Update аномалия – необходимость обнолять инфу в нескольких кортежах.
  • Delete аномалия – удаление части может повлиять на другую инфу.

Для устранения аномалий используют правило декомпозиции отношений. (процесс разбиения исходного отношения на два и более).

Существует Нормальная форма Бойса-Кода (BCNF)

Отношение находится в BCNF когда не существует нетривиальной функц.зависимости, такой, что атрибуты – суперключ.

  1. Отношение в первой нормальной форме, если все атрибуты атомарны.
  2. Во второй, если он в первой, и каждый неключевой атрибут функц. зависит от ключа, но не зависит ни от какого подмножества ключа.
  3. В третьей – если он во второй, и не ключевой атрибут зависит нетранзитивно от ключа.
  4. В 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.

Уровни:

  1. No trashing of data. (Запрещение загрязнения данных) Запрет на параллельное изменение данных.
  2. No read — Запрет параллельного чтения данных.
  3. 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 – синхронизация баз

Утилиты:

  1. Snapshot Agent
  2. LOG READER AGENT – логи.
  3. Distribution agent
  4. Merge Agent

GUI

Пишется с помощью API на JavaScript, с помощью ASP.

Виды соединений:

  • ODBC – Open DB Connectivity
  • OLE DB – буфер обмена например
  • ActiveX Data Objects (ADO)
  • Borland DB Engine (BDE)
  • ADO.NET