экзамен
.pdf
• Опр. Отношение находится в ЗНФ, если оно находится в 2НФ и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.
• Отношение находится в БКНФ, если оно находится в ЗНФ и в нем отсутствуют зависимости ключей (атрибутов составного ключа) от неключевых атрибутов.
15. Нормализация. Термины. 4НФ, 5НФ, 6НФ. Примеры не из википедии.
Нормализация — это процесс организации, структурирования данных в базе данных, включающий создание таблиц и установление отношений между ними в соответствии с правилами, которые обеспечивают защиту данных и делают базу данных более гибкой, устраняя избыточность и несогласованные зависимости для минимизации возможных противоречий
Аномалией называется такая ситуация в таблице БД, которая приводит к противоречию в БД либо существенно усложняет обработку БД. Причиной является излишнее дублирование данных в таблице, которое вызывается наличием функциональных зависимостей от не ключевых атрибутов.
Нормальная форма — требование, предъявляемое к структуре таблиц в теории реляционных баз данных для устранения из базы избыточных функциональных зависимостей между атрибутами (полями таблиц).
•Атрибут — свойство некоторой сущности. Часто называется полем таблицы.
•Домен атрибута — множество допустимых значений, которые может принимать атрибут.
•Кортеж — конечное множество взаимосвязанных допустимых значений атрибутов, которые вместе описывают некоторую сущность (строка таблицы).
•Отношение — конечное множество кортежей (таблица).
•Схема отношения — конечное множество атрибутов, определяющих некоторую сущность. Иными словами, это структура таблицы, состоящей из конкретного набора полей.
•Проекция — отношение, полученное из заданного путём удаления и (или) перестановки некоторых атрибутов.
•Опр. Отношение находится в 1-й нормальной форме, если все атрибуты атомарны и неделимы, то есть если ни один из его атрибутов нельзя разделить на более простые атрибуты, которые соответствуют каким-то другим свойствам описываемой сущности.
Опр. Отношение находится в четвертой нормальной форме тогда и только тогда, когда оно находится в НФБК и его многозначные зависимости представляются функциональными зависимостями от ключа.
• В результате проведения всех операций нормализации до 5НФ считается, что разработчик получает полностью нормализованное отношение, нс содержащее никаких аномалий обновления.
• Переменная отношения находится в шестой нормальной форме тогда и только тогда, когда она удовлетворяет всем нетривиальным зависимостям соединения. Из определения следует, что переменная находится в 6НФ тогда и только тогда, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь.
16. Стандарт SQL. История. Типы команд SQL. Основные достоинства SQL.
SQL (Structured Query Language) — Структурированный Язык Запросов — стандартный язык запросов по работе с реляционными БД. Язык SQLпоявился после реляционной алгебры, и его прототип был разработан в конце 70-х годов в компании IBM Research. Он был реализован в первом прототипе реляционной СУБД фирмы IBM System R.
В дальнейшем этот язык применялся во многих коммерческих СУБД и в силу своего широкого распространения постепенно стал стандартом "де-факто" для языков манипулирования данными в реляционных СУБД.
Первый международный стандарт языка SQL был принят в 1989 г. (далее мы будем называть его SQL/89 или SQL1). В конце 1992 г. был принят новый международный стандарт языка SQL, который в дальнейшим будем называть SQL/92 или SQL2. В настоящий момент большинство производителей СУБД внесли изменения в свои продукты так, чтобы они в большей степени удовлетворяли стандарту SQL2.
Основные категории команд языка SQL:
-DDL – язык определения данных;
-DML – язык манипулирования данными;
-DQL – язык запросов ;
-DCL – язык управления данными;
-команды администрирования данных;
-команды управления транзакциями
Преимущества языка SQL
•стандартность – как уже было сказано, использование языка SQL в программах стандартизировано международными организациями;
•независимость от конкретных СУБД – все распространенные СУБД используют SQL, т.к. реляционную базу данных можно перенести с одной СУБД на другую с минимальными доработками;
•возможность переноса с одной вычислительной системы на другую – СУБД может быть ориентирована на различные вычислительные системы, однако приложения, созданные с помощью SQL, допускают использование как для локальных БД, так и для крупных многопользовательских систем;
•реляционная основа языка – SQL является языком реляционных БД, поэтому он стал популярным тогда, когда получила широкое распространение реляционная модель представления данных. Табличная структура реляционной БД хорошо понятна, а потому язык SQL прост для изучения;
•возможность создания интерактивных запросов – SQL обеспечивает пользователям немедленный доступ к данным, при этом в интерактивном режиме можно получить результат запроса за очень короткое время без написания сложной программы;
•возможность программного доступа к БД – язык SQL легко использовать в приложениях,
которым необходимо обращаться к базам данных. Одни и те же операторы SQL употребляются как для интерактивного, так и программного доступа, поэтому части
программ, содержащие обращение к БД, можно вначале проверить в интерактивном режиме, а затем встраивать в программу;
•обеспечение различного представления данных – с помощью SQL можно представить такую структуру данных, что тот или иной пользователь будет видеть различные их представления. Кроме того, данные из разных частей БД могут быть скомбинированы и представлены в виде одной простой таблицы, а значит, представления пригодны для усиления защиты БД и ее настройки под конкретные требования отдельных пользователей;
•возможность динамического изменения и расширения структуры БД – язык SQL
позволяет манипулировать структурой БД, тем самым обеспечивая гибкость с точки зрения приспособленности БД к изменяющимся требованиям предметной области;
•поддержка архитектуры клиент-сервер – SQL – одно из лучших средств для реализации приложений на платформе клиент-сервер. SQL служит связующим звеном между взаимодействующей с пользователем клиентской системой и серверной системой, управляющей БД, позволяя каждой из них сосредоточиться на выполнении своих функций.
17.Типы данных SQL. Команды для создания базы данных. Команды для создания и удаления таблиц. Ограничения столбца. Действия на ключ родительской таблицы.
Создание таблицы
CREATE TABLE employee_data (emp_id int unsigned not null auto_increment primary key, f_name varchar(20), l_name varchar(20), title varchar(30), age int, salary int, perks int, email varchar(60));
•CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
•имя
•[(спецификация, ...)]
•[опция, ...]
•[ [IGNORE | REPLACE] запрос]
Удаление таблицы
DROP TABLE [IF EXISTS] таблица [RESTRICT |CASCADE]
Ограничения для столбца
•NOT NULL - в любой добавляемой или изменяемой строке столбец всегда должен иметь значение, отличное от NULL .
•UNIQUE - все значения столбца должны быть уникальны.
•PRIMARY KEY - устанавливает один столбец как первичный ключ и одновременно подразумевает, что все значения столбца будут уникальны.
•CHECK ( condition ) - указываемое в скобках условие использует для сравнения значение столбца и возвращает TRUE, FALSE или UNKNOWN. Если при попытке выполнения SQLоператора возвращаемое значение равно FALSE, то оператор выполнен не будет.
•REFERENCES table ( fields_list ) - ограничение требует совпадения значений столбцов данной таблицы с указанными столбцами родительской таблицы.
Ограничения на родительский ключ
•CASCADE - распространение изменений, произведенных в родительском ключе, на совпадающие строки внешнего ключа (для MATCH PARTIAL - только на уникально совпадающие строки).
•SET NULL - значения внешнего ключа изменяются на NULL по следующим правилам: для MATCH FULL - заменяются все значения внешнего ключа; для MATCH PARTIAL - в уникально совпадающих строках заменяются значения только тех столбцов, значения которых в родительском ключе были изменены; если тип совпадения не указан, то заменяются значения только тех столбцов, значения которых в родительском ключе были изменены.
•SET DEFAULT - значения внешнего ключа изменяются на значение по умолчанию по тем же правилам, что и для фразы SET NULL , но при типе соответствия MATCH FULL заменяются значения только тех столбцов внешнего ключа, которые уникально соответствуют родительскому ключу (значение NULL внешнего ключа не заменяется).
•NO ACTION - никаких действий во внешнем ключе не выполняется, допускаются только изменения родительского ключа, не нарушающие ссылочную целостность.
18. Команда для модификации таблицы. Очистка таблицы. Управление ключами.
Команда для модификации таблицы
ALTER [IGNORE] TABLE название_таблицы_изменения [, изменения ...]
Очистка таблицы
DELETE FROM table_name WHERE where_definition
Ключи
•CREATE TABLE SomeTable (composite CHAR(200), INDEX comp_idx(composite(40)));
•INDEX (first, second, third, fourth)
(first, second, third)(first, second)(first)
PRIMARY KEY, FOREIGN KEY – для добавления ключей
19. CRUD команды. Подробно про INSERT, UPDATE, DELETE и немного про SELECT
DML&DQL (CRUD)
•INSERT – вставка новых данных
•SELECT – выборка данных
•UPDATE – обновление данных
•DELETE – удаление данных
INSERT INTO
•В выражении можно использовать любое предыдущее поле в списке column_name (или таблицу, если список имен столбцов не задан).
•При использовании SELECT вы не можете указать ORDER BY.
UPDATE
•Все обновления выполняются слева направо.
•Внутри UPDATE на одной таблице все операции атомарные. Напримерe, Вы можете увеличивать счетчик внутри таблицы, просто прибавляя 1 к соответствующей переменной.
DELETE
•Возвращает количество обработанных записей.
•Если вызван DELETE без WHERE, то таблица будет очищена. В этом случае DELETE вернет 0 для числа обработанных записей.
20. Подробно про SELECT. Псевдонимы. Подзапросы. Присоединения.
SELECT
•STRAIGHT_JOIN Позволяет жестко определить порядок объединения таблиц. Идентично JOIN, за исключением того, что левая таблица всегда читается раньше правой.
•DISTINCT | ALL – Предикаты. ALL – по умолчанию выбираются все записи, которые соответствуют условию запроса. DISTINCT – исключаются повторяющиеся записи.
•select_expression задает столбцы, в которых необходимо проводить выборку.
•HAVING может используется в запросе только в том случае, когда в нем присутствует GROUP BY. Задает условие на группу строк сгруппированной таблицы.
•PROCEDURE procedure_name Указание процедуры, которая обработает результаты запроса.
ПСЕВДОНИМЫ (ALIAS)
•В некоторых ситуациях к столбцам и таблицам MySQL гораздо
удобнее обращаться по другим именам.
•Пример такой ситуации – в запросе требуется выполнить тройное объединение (в котором две таблицы на самом деле являются одной), то есть дважды сославшись на 1 таблицу.
SELECT flight.number, origin.name, destination.name
FROM flight INNER JOIN city AS origin
ON flight.origincityid = origin.id
INNER JOIN city AS destination
ON flight.destinationcityid = destination.id
Присоединение
Join — оператор для объединения данных из нескольких таблиц с общим ключом.
Существуют следующие типы соединений:
INNER JOIN или просто JOIN - внутреннее соединение. В результате остаются только те строки, для которых нашлось соответствие. До сих пор мы использовали только этот тип соединений.
LEFT JOIN - левое внешнее соединение. Работает как JOIN, но если для строки таблицы, находящейся по левую сторону ключевого слова LEFT JOIN, не нашлось ни одной строки в таблице, находящейся по правую сторону LEFT JOIN, то строка все равно добавляется в результат, а значения столбцов правой таблицы равны null.
RIGHT JOIN - правое внешнее соединение. Работает как JOIN, но если для строки таблицы, находящейся по правую сторону ключевого слова RIGHT JOIN, не нашлось ни одной строки в таблице, находящейся по левую сторону RIGHT JOIN, то строка все равно добавляется в результат, а значения столбцов левой таблицы равны null.
FULL JOIN - полное внешнее соединение. Если для какой-либо из таблиц не нашлось строки в другой таблице, то строка все равно попадает в результат, а значения столбцов другой таблицы равны null.
CROSS JOIN - перекрестное (или декартово) произведение. Каждая строка одной таблицы соединяется с каждой строкой второй таблицы, давая тем самым в результате все возможные сочетания строк двух таблиц. Аналогичного результата можно достичь просто перечислив таблицы в FROM через запятую.
21. Индексы в MySQL. Когда создавать индексы.
Индексы в MySQL
•На жестком диске нет такого понятия, как файл. Есть понятие блок. Один файл обычно занимает несколько блоков. Каждый блок знает, какой блок идет после него. Файл делится на куски и каждый кусок сохраняется в пустой блок.
•При чтении файла, мы по очереди проходимся по всем блокам и собираем файл из кусков. Блоки одного файла могут быть раскиданы по диску (фрагментация). Тогда чтение файла замедлится, т.к. понадобится прыгать разным участкам диска.
•Когда мы ищем что-то внутри файла, нам понадобится пройтись по всем блокам, в которых он сохранен. Если файл очень большой, то и количество блоков будет значительным. Необходимость перепрыгивать с блока на блок, которые могут находиться в разных местах, сильно замедлит поиск данных.
•Индекс — это и есть отсортированный набор значений. В MySQL индексы всегда строятся для какой-то конкретной колонки.
•Индекс состоит из набора страниц, узлов индекса, которые организованы в виде древовидной структуры — сбалансированного дерева.
Когда создавать индексы?
•Индексы следует создавать по мере обнаружения медленных запросов. В этом поможет slow log в MySQL. Запросы, которые выполняются более 1 секунды являются первыми кандидатами на оптимизацию.
•Начинайте создание индексов с самых частых запросов. Запрос, выполняющийся секунду, но 1000 раз в день наносит больше ущерба, чем 10-секундный запрос, который выполняется несколько раз в день.
•Не создавайте индексы на таблицах, число записей в которых меньше нескольких тысяч. Для таких размеров выигрыш от использования индекса будет почти незаметен.
•Не создавайте индексы заранее, например, в среде разработки. Индексы должны устанавливаться исключительно под форму и тип нагрузки работающей системы.
•Удаляйте неиспользуемые индексы.
22. Хранимые процедуры и функции в MySQL. Курсоры. Триггеры.
СУБД MySQL поддерживает хранимые процедуры. Под этим термином понимается
последовательность операций, хранящаяся как единое целое в каталоге базы данных на сервере.
В MySQL функция - это хранимая программа, в которую вы можете передавать параметры и возвращать значение.
Функции и процедуры
•CREATE PROCEDURE proc_name ([parameters]) [characteristics] routine_body
•CREATE FUNCTION func_name ([parameters]) RETURNS data_type // different [characteristics] routine_body
Курсор — ссылка на контекстную область памяти. В некоторых реализациях языка программирования SQL (Oracle, Microsoft SQL Server) — получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи. бы сказал, что курсор — это виртуальная таблица которая представляет собой альтернативное хранилище данных. При этом курсор, позволяет обращаться к своим данным, как к данным обычного массива
Триггер — это хранимая процедура, которая не вызывается непосредственно, а исполняется при наступлении определенного события ( вставка, удаление, обновление строки ). Поддержка триггеров в MySQL началась с версии 5.0.2
Триггеры синтаксис
