Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог / +Раздел IX. Базы данных.doc
Скачиваний:
122
Добавлен:
23.03.2015
Размер:
182.78 Кб
Скачать

Доменно-ключевая нормальная форма (dknf)

Отношение в ДКНФ не имеет аномалий модификации. Другими словами, что бы ни менялось — ничего не потеряется, если соблюдены все ограничения относительно ключей и доменов. Формулировка слишком общая, но суть ее заключается в том, что если выполнять некоторые правила, то при любых действиях с таблицей ее целостность не пострадает и вся необходимая информация сохранится. Если рассматривать на примере, то правила действуют примерно так: нельзя просто удалить категорию из таблицы категорий, если с этой категорией связаны, например, продукты из таблицы продуктов. Прежде чем удалять категорию, необходимо выполнить предварительные действия в таблице продуктов (например, поле отвечающее за id категории этого товара нужно сделать NULL).

Шестая нормальная форма (6nf)

Таблица находится в 6NF, если она находится в 5NF и удовлетворяет требованию отсутствия нетривиальных зависимостей. Зачастую 6NF отождествляют с DKNF.

  1. Типы данных, операторы и запросы SQL.

а) типы данных; Числовые типы столбцов используются для хранения чисел, все числовые типы можно разбить на два подтипа для хранения точных чисел и чисел с плавающей точкой. Все числовые типы характеризуются длинной хранимых чисел, а типы с плавающей точкой еще и числом десятичных разрядов.

NUMERIC или DECIMAL Эти типы данных идентичны, а DECIMAL можно сократить до DEC. Эти типы данных используются для хранения чисел с плавающей точкой. Обычно их используют для хранения денежных значений.

INTEGER Тип данных INTEGER можно сократить до INT. Это просто целое число в заданном диапазоне. Для хранения этого типа данных отводится 4 байта и оно может хранить числа до двух в тридцать второй степени. Также существует несколько вариантов типа INTEGER.

FLOAT Это числа с плавающей точкой с обычной точностью (4 байта). Они могут представлять числа в диапазоне от 1.18 на 10 в минус 38 степени до 3.4 на 10 в тридцать восьмой степени.

DOUBLE Числа с плавающей точкой двойной точности(8 байтов) диапазон значений ±10 в 308 степени.

Текстовые типы данных.

CHAR Тип CHAR используется для хранения строк фиксированной длинны. После ключевого слова CHAR обычно указывается длинна строки, например, CHAR(50) если длинна строки не указана то считается, что длинна равна одному символу. Максимальная длинна поля данного типа равняется 255 символам.

VARCHAR предназначен для хранения строк переменной длинны. Так же, как и в предыдущем типе данных у VARCHAR задается максимальная длинна строки, например, VARCHAR(30). Разница в использовании двух описанных типов заключается в том, что по строкам с фиксированной длинной выборка идет намного быстрее.

TEXT и BLOB Типы полей TEXT используются для хранения более длинных фрагментов текста, чем допускается предыдущими типами. Сокращение BLOB означает большой двоичный объект. Эти два типа одинаковы за исключением того, что в типе BLOB сравнение строк идет с учетом регистра символов, а в типе TEXT без учета регистра. Оба типа имеют переменную длину и оба имеют некоторые вариации:

TINYTEXT и TINYBLOB - Могут хранить до 255 символов

TEXT и BLOB могут хранить до 64 килобайт информации

MEDIUMTEXT и MEDIUMBLOB - до 16 мегабайт

LONGTEXT и LONGBLOB до 4 гигабайт

ENUM Этот тип позволяет перечислить набор возможных значений для ввода в поле и хранит только одно значение из представленного списка. Например, ENUM(`m`,`a`,`z`).

SET Этот тип похож на тип ENUM, но позволяет хранить несколько значений из списка значений в поле.

Типы даты и времени.

DATE Тип применяется для хранения дат в формате(гггг-мм-дд)

TIME Хранит время в виде (чч:мм:сс)DATETIME Комбинация предыдущих двух типов. формат следующий ГГГГ-ММ-ДД ЧЧ:ММ:СС.

TIMESTAMP Тип столбца при задании, которого если не указать значение, будет подставлено текущее значение времени, когда строка создана или изменена, при этом значение строки будет отображаться в формате DATETIME.

YEAR содержит значение года. Возможны две длинны: YEAR(2) и YEAR(4) для двух, и четырех цифр года соответственно. Нужно отметить, что при YEAR(2) диапазон дат принимается с 1970 по 2069 годы.

б) общий вид оператора SQL (select, insert, update, delete);

SELECT [DISTINCT]

{*,column [alias], select_expression, ...}

FROM table_references [WHERE where_definition]

[GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

[HAVING where_definition]

[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

[LIMIT [offset,] rows | rows OFFSET offset]

SELECT применяется для извлечения строк, выбранных из одной или нескольких таблиц. Выражение select_expression задает столбцы, в которых необходимо проводить выборку. Кроме того, оператор SELECT можно использовать для извлечения строк, вычисленных без ссылки на какую-либо таблицу.

При указании ключевых слов следует точно соблюдать порядок, указанный выше. Параметр (опция) DISTINCT подавляет выборку дубликатов, column - выбирает заданный столбец, * - выбирает все столбцы, alias - дает выбираемым столбцам другие заголовки.

Выражение FROM table_references задает таблицы, из которых надлежит извлекать строки. Если указано имя более чем одной таблицы, следует выполнить объединение.

Предложение WHERE where_definition позволяет ограничить количество строк, возвращаемых в результате запроса, where_definition является ограничивающим условием.

В выражениях ORDER BY и GROUP BY для ссылок на столбцы, выбранные для вывода информации, можно использовать либо имена столбцов, либо их позиции (местоположения). Нумерация позиций столбцов начинается с 1.

Для того чтобы сортировка производилась в обратном порядке, в утверждениях ORDER BY и GROUP BY к имени заданного столбца, в котором производится сортировка, следует добавить ключевое слово DESC (убывающий). По умолчанию принята сортировка в возрастающем порядке, который можно задать явно при помощи ключевого слова ASC.

Выражение HAVING может ссылаться на любой столбец, упомянутый в выражении select_expression. HAVING отрабатывается последним, непосредственно перед отсылкой данных клиенту, и без какой бы то ни было оптимизации.

Выражение LIMIT может использоваться для ограничения количества строк, возвращенных командой SELECT. LIMIT принимает один или два числовых аргумента. Эти аргументы должны быть целочисленными константами. Если заданы два аргумента, то первый указывает на начало первой возвращаемой строки, а второй задает максимальное количество возвращаемых строк.

INSERT INTO tbl_name [(col_name,...)] VALUES (value1 [, value2...]);

или INSERT INTO tbl_name [(col_name,...)] SELECT ...

Оператор INSERT вставляет новые строки в существующую таблицу. Форма данной команды INSERT ... VALUES вставляет строки в соответствии с точно указанными в команде значениями. Форма INSERT ... SELECT вставляет строки, выбранные из другой таблицы или таблиц.

tbl_name задает таблицу, в которую должны быть внесены строки. Столбцы, для которых заданы величины в команде, указываются в списке имен столбцов.

Если не указан список столбцов для INSERT ... VALUES или INSERT ... SELECT, то величины для всех столбцов должны быть определены в списке VALUES() или в результате работы SELECT. Если порядок столбцов в таблице неизвестен, для его получения можно использовать DESCRIBE tbl_name.

Любой столбец, для которого явно не указано значение, будет установлен в свое значение по умолчанию.

UPDATE tbl_name

SET col_name1=expr1 [, col_name2=expr2 ...]

[WHERE where_definition]

[ORDER BY ...]

[LIMIT rows]

Оператор UPDATE обновляет столбцы в соответствии с их новыми значениями в строках существующей таблицы. В выражении SET указывается, какие именно столбцы следует модифицировать и какие величины должны быть в них установлены. В выражении WHERE, если оно присутствует, задается, какие строки подлежат обновлению. В остальных случаях обновляются все строки. Если задано выражение ORDER BY, то строки будут обновляться в указанном в нем порядке. Значения команда UPDATE присваивает слева направо.

DELETE FROM table_name

[WHERE where_definition]

[ORDER BY ...]

[LIMIT rows]

Оператор DELETE удаляет из таблицы table_name строки, удовлетворяющие заданным в where_definition условиям, и возвращает число удаленных записей.

Если оператор DELETE запускается без определения WHERE, то удаляются все строки. Если применяется выражение ORDER BY , то строки будут удалены в указанном порядке. В действительности это выражение полезно только в сочетании с LIMIT. Например:

DELETE FROM somelog

WHERE user = 'jcole'

ORDER BY timestamp

LIMIT 1

в) вложенные подзапросы, объединения, примеры.

С помощью SQL можно вкладывать запросы внутрь друга друга. Обычно, внутренний запрос генерирует значение которое проверяется в предикате внешнего запроса. Например, предположим что мы знаем имя продавца: Motika, но не знаем значение его пол snum, и хотим извлечь все порядки из таблицы Порядков:

SELECT * FROM Orders WHERE snum = ( SELECT snum FROM Salespeople WHERE sname = 'Motika');

Можно использовать подзапросы которые производят любое число. Для этого используется специальный оператор IN

SELECT * FROM Orders WHERE snum IN ( SELECT snum FROM Salespeople WHERE city = 'London' );

Можно создать запрос в котором используются данные из нескольких таблиц:

SELECT Salespeople.sname, Customers.cname FROM Salespeople, Customers WHERE Salespeople.snum = Customers.cnum;

Можно поместить многочисленные запросы вместе и объединить их вывод используя предложение UNION. Предложение UNION объединяет вывод двух или более SQL запросов в единый набор строк и столбцов. Например, следующий запрос выводит всех продавцов и заказчиков, размещенных в Лондоне:

SELECT snum, sname FROM Salespeople WHERE city = 'London'

UNION SELECT cnum, cname FROM Customers WHERE city = 'London';

Когда два ( или более ) запроса подвергаются объединению, их столбцы вывода должны быть совместимы для объединения. Это означает, что каждый запрос должен указывать одинаковое число столбцов и в том же порядке что и первый, второй, третий, и так далее, и каждый должен иметь тип, совместимый с каждым.

UNION будет автоматически исключать дубликаты строк из вывода