- •11. Первая нормальная форма (1нф)
- •13. Третья нормальная форма.
- •Создание групп (group by)
- •Пример создания временной таблицы:
- •Пример создания временной таблицы с использованием поздапроса
- •Виды секционирования Диапазонное секционирование
- •Интервальное секционирование
- •Секционирование по виртуальному столбцу
- •Системное секционирование
13. Третья нормальная форма.
Третья нормальная форма связана с транзитивными зависимостями. Транзитивные зависимости между полями базы данных существует тогда, когда значения не ключевых полей зависят от значений других не ключевых полей. Чтобы база данных была в третьей нормальной форме, она должна быть во второй нормальной форме.
Транзитивные зависимости.
Правило: не может быть транзитивных зависимостей между полями в таблице. Таблица клиентов (мои клиенты – игроки немецкой и французской футбольной команды) ниже содержит транзитивные зависимости.
В этой таблице не все поля зависят исключительно от первичного ключа. Существует отдельная связь между полем postal_code и полями города (city) и провинции (province). В Нидерландах оба значение: город и провинция – определяются почтовым кодом, индексом. Таким образом, нет необходимости хранить город и провинцию в клиентской таблице. Если вы знаете почтовый код, то вы уже знаете город и провинцию.
Такая транзитивной зависимости следует избегать, если вы хотите, чтобы ваша модель базы данных была в третьей нормальной форме.
В данном случае устранение транзитивной зависимости из таблицы может быть достигнуто путем удаления полей города и провинции из таблицы и хранение их в отдельной таблице, содержащей почтовый код (первичный ключ), имя провинции и имя города. Получение комбинации почтовый код-город-провинция для целой страны может быть весьма нетривиальным занятием. Вот почему такие таблицы зачастую продаются.
Другим примером для применения третьей нормальной формы может служить (слишком) простой пример таблицы заказов интернет-магазина ниже.
НДС (value added tax) – это процент, который добавляется к цене продукта (19% в данной таблице). Это означает, что значение total_ex_vat может быть вычислено из значения total_inc_vat и vice versa. Вы должны хранить в таблице одно из этих значений, но не оба сразу. Вы должны возложить задачу вычисления total_inc_vat из total_ex_vat или наоборот на программу, которая использует базу данных.
Третья нормальная форма гласит, что вы не должны хранить данные в таблице, которые могут быть получены из других (не ключевых) полей таблицы. Особенно в примере с таблицей клиентов следование третьей нормальной форме требует либо большого объема работы, либо приобретения коммерческой версии данных для такой таблицы.
Третья нормальная форма не всегда используется при проектировании баз данных. Когда разрабатываете базу данных вы всегда должны сравнивать преимущества от более высокой нормальной формы в сравнении с объемом работ, которые требуются для применения третьей нормальной формы и поддержания данных в таком состоянии. В случае с клиентской таблицей лично я бы предпочел не нормализовать таблицу до третьей нормальной формы. В последнем примере с НДС я бы использовал третью нормальную форму. Хранение данных, воспроизводимых из существующих, обычно плохая идея.
54. SQL: стандарты, группы операторов, перечень основных операторов в группах и их назначение.
Стандарты:
1)ANSI/SQL 86;
2)SQL 92: SQL 2, ISO 9075;
3)SQL 99: SQL 3, объектно-ориентированные возможности;
4)SQL 2003, SQL 2006, SQL 2009: XML;
В начале 1970-х годов в одной из исследовательских лабораторий компании IBM была разработана экспериментальная реляционная СУБД IBM System R, для которой затем был создан специальный язык SEQUEL, позволявший относительно просто управлять данными в этой СУБД.
Аббревиатура SEQUEL расшифровывалась как Structured English QUEry Language – «структурированный английский язык запросов». Позже по юридическим соображениям[2] язык SEQUEL был переименован в SQL.
Когда в 1986 году первый стандарт языка SQL был принят ANSI (American National Standards Institute), официальным произношением стало [,es kju:' el] – эс-кью-эл. Несмотря на это, даже англоязычные специалисты зачастую продолжают читать SQL как сиквел (по-русски часто говорят «эс-ку-эль» или используют жаргонизм «скуль»).
Со временем к стандарту накопилось несколько замечаний и пожеланий, особенно с точки зрения обеспечения целостности и корректности данных, в результате чего в 1989 году данный стандарт был расширен, получив название SQL89. В частности, в него была добавлена концепция первичного и внешнего ключей.
Сразу после завершения работы над стандартом SQL1 в 1987 году была начата работа над новой версией стандарта, который должен был заменить стандарт SQL89, получив название SQL2, поскольку дата принятия документа на тот момент была неизвестна. Таким образом, фактически SQL89 и SQL2 разрабатывались параллельно.
Новая версия стандарта была принята в 1992 году, заменив стандарт SQL89.
Следующим стандартом стал SQL:1999 (SQL3).Добавлена поддержка регулярных выражений, рекурсивных запросов, поддержка триггеров, базовые процедурные расширения, нескалярные типы данных и некоторые объектно-ориентированные возможности.
SQL 2003,SQL 2006, SQL 2009: XML.
Операторы SQL делятся на:
операторы определения данных (Data Definition Language, DDL)
CREATE создает объект БД (саму базу, таблицу, представление, пользователя и т. д.)
ALTER изменяет объект
DROP удаляет объект
операторы манипуляции данными (Data Manipulation Language, DML)
SELECT считывает данные, удовлетворяющие заданным условиям
INSERT добавляет новые данные
UPDATE изменяет существующие данные
DELETE удаляет данные
операторы определения доступа к данным (Data Control Language, DCL)
GRANT предоставляет пользователю (группе) разрешения на определенные операции с объектом
REVOKE отзывает ранее выданные разрешения
операторы управления транзакциями (Transaction Control Language, TCL)
COMMIT применяет транзакцию.
ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции.
SAVEPOINT делит транзакцию на более мелкие участки.
55. Оператор SELECT: назначение, секции оператора, назначение секций, порядок выполнения секций.
SELECT (англ., означает «выбрать») — оператор DML языка SQL, возвращающий набор данных (выборку) из базы данных, удовлетворяющих заданному условию.
Оператор select имеет следующие секции : 1)Перед from – distinct, top; 2)После from – where, order by, group by, having, compute.
секция TOP, показывает первые несколько строк, в зависимости от того какую укажем цифру
select top 3 * from AUDITORIUM
DISTINCT (ОТЛИЧИЕ) - аргумент который обеспечивает Вас способом устранять двойные значения из вашего предложения SELECT.
select distinct AUDITORIUM_TYPE from AUDITORIUM
Операция LIKE в секции WHERE оператора SELECT
select * from AUDITORIUM_TYPE where AUDITORIUM_TYPENAME like '%комп%'
Секция GROUP BY оператора SELECT. Продемонстрируйте группировки по одному и нескольким атрибутам таблицы.
select AUDITORIUM_TYPE, AUDITORIUM_CAPACITY from AUDITORIUM group by AUDITORIUM_TYPE, AUDITORIUM_CAPACITY
Секция WHERE оператора SELECT логические выражения
select *from AUDITORIUM where AUDITORIUM_CAPACITY<60 and AUDITORIUM_CAPACITY>10
select *from AUDITORIUM where AUDITORIUM_CAPACITY!=90
Секция HAVING – фильтрующие группы.
Так же, как мы фильтровали строки в таблице, мы можем осуществлять фильтрацию по сгруппированным данным. Для этого в SQL существует операторHAVING. Возьмем предыдущий пример и добавим фильтрацию по группам.
SELECT Product, SUM(Quantity) AS Product_num FROM Sumproduct GROUP BY Product HAVING SUM(Quantity)>4000
Секция COMPUTE – формирует в результирующем наборе сегменты и промежуточные итоги.
s
elect
AUDITORIUM,
AUDITORIUM_TYPE,
AUDITORIUM_CAPACITY
from
AUDITORIUM
order
by
AUDITORIUM_TYPE
compute
SUM(AUDITORIUM_CAPACITY)
by
AUDITORIUM_TYPE
56. Группировка данных в операторе SELECT. Агрегатные функции. Применение конструкций GROUP BY ROLLUP и GROUP BY CUBE. Применение секции HAVING.
