Построение кросс-таблиц


Одной из задач, связанных с представлением табличных данных является построение так называемых кросс-таблиц.

    Таблица 27
    Невыразимость транзитивного замыкания реляционными операторами
    Пример 17
    Таблица 28
    Кросс-таблицы
    Примером такого отношения могут...
    Таблица 29 товар месяц количество...
    Таблица 30
    Выводы
    Глава 5. Элементы языка sql
    Операторы sql
    Операторы ddl (data definition language) - операторы определения объектов базы данных
    Операторы dml (data manipulation language) - операторы манипулирования данными
    Операторы защиты и управления данными


    Операторы защиты и управления данными CREATE ASSERTION - создать ограничение DROP ASSERTION - удалить ограничение GRANT - предоставить привилегии пользователю или приложению на манипулирование объ...
    Примеры использования операторов манипулирования данными insert - вставка строк в таблицу
    INSERT - вставка строк в таблицу Пример 1 . Вставка одной строки в таблицу: INSERT INTO P (PNUM, PNAME) VALUES (4, "Иванов");...
    Пример 2
    Пример 2 . Вставка в таблицу нескольких строк, выбранных из другой таблицы (в таблицу TMP_TABLE вставляются данные о поставщиках из таблицы P, имеющие номера, большие 2): INSERT INTO TMP_TABLE (PN...
    Update - обновление строк в таблице
    UPDATE - обновление строк в таблице...
    Пример 3
    Пример 3 . Обновление нескольких строк в таблице: UPDATE P SET PNAME = "Пушников" WHERE P.PNUM = 1;...
    Delete - удаление строк в таблице
    DELETE - удаление строк в таблице...
    Пример 4
    Пример 4 . Удаление нескольких строк в таблице: DELETE FROM P WHERE P.PNUM = 1;...
    Пример 5
    Пример 5 . Удаление всех строк в таблице: DELETE FROM P;...
    Примеры использования оператора...
    Отбор данных из одной таблицы Пример 6 . Выбрать все данные из таблицы поставщиков (ключевые слова SELECT … FROM …): SELECT * FROM P; Замечание . В результате получим новую таблицу, содержащую пол...
    Пример 7
    Пример 7 . Выбрать все строки из таблицы поставщиков, удовлетворяющих некоторому условию (ключевое слово WHERE …): SELECT * FROM P WHERE P.PNUM 2; Замечание . В качестве условия в разделе WHERE мо...
    Пример 8
    Пример 8 . Выбрать некоторые колонки из исходной таблицы (указание списка отбираемых колонок): SELECT P.NAME FROM P; Замечание . В результате получим таблицу с одной колонкой, содержащую все наиме...
    Пример 9
    Пример 9 . Выбрать некоторые колонки из исходной таблицы, удалив из результата повторяющиеся строки (ключевое слово DISTINCT ): SELECT DISTINCT P.NAME FROM P; Замечание . Использование ключевого с...
    Пример 10
    Пример 10 . Использование скалярных выражений и переименований колонок в запросах (ключевое слово AS …): SELECT TOVAR.TNAME, TOVAR.KOL, TOVAR.PRICE, "=" AS EQU, TOVAR.KOL*TOVAR.PRICE AS SUMMA FROM...
    Таблица 1
    Таблица 1 TNAME KOL PRICE EQU SUMMA Болт 10 100 = 1000 Гайка 20 200 = 4000 Винт 30 300 = 9000...
    Пример 11
    Пример 11 .Упорядочение результатов запроса (ключевое слово ORDER BY …): SELECT PD.PNUM, PD.DNUM, PD.VOLUME FROM PD ORDER BY DNUM; В результате получим следующую таблицу, упорядоченную по полю DNU...
    Таблица 2
    Таблица 2 PNUM DNUM VOLUME 1 1 100 2 1 150 3 1 1000 1 2 200 2 2 250 1 3 300...
    Пример 12
    Пример 12 . Упорядочение результатов запроса по нескольким полям с возрастанием или убыванием (ключевые слова ASC , DESC ): SELECT PD.PNUM, PD.DNUM, PD.VOLUME FROM PD ORDER BY DNUM ASC, VOLUME DES...
    Таблица 3
    Таблица 3 PNUM DNUM VOLUME 3 1 1000 2 1 150 1 1 100 2 2 250 1 2 200 1 3 300 Замечание . Если явно не указаны ключевые слова ASC или DESC, то по умолчанию принимается упорядочение по возрастанию (A...
    Пример 13
    Пример 13 . Естественное соединение таблиц (способ 1 - явное указание условий соединения): SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME FROM P, PD WHERE P.PNUM = PD.PNUM; В результате получим новую...
    Таблица 4
    Таблица 4 PNUM PNAME DNUM VOLUME 1 Иванов 1 100 1 Иванов 2 200 1 Иванов 3 300 2 Петров 1 150 2 Петров 2 250 3 Сидоров 1 1000 Замечание . Соединяемые таблицы перечислены в разделе F...
    Пример 14
    Пример 14 . Естественное соединение таблиц (способ 2 - ключевые слова JOIN… USING… ): SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME FROM P JOIN PD USING PNUM; Замечание . Ключевое слово USING позволя...
    Пример 15
    Пример 15 . Естественное соединение таблиц (способ 3 - ключевое слово NATURAL JOIN ): SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME FROM P NATURAL JOIN PD; Замечание . В разделе FROM не указано, по к...
    Пример 16
    Пример 16 . Естественное соединение трех таблиц: SELECT P.PNAME, D.DNAME, PD.VOLUME FROM P NATURAL JOIN PD NATURAL JOIN D; В результате получим следующую таблицу:...
    Таблица 5
    Таблица 5 PNAME DNAME VOLUME Иванов Болт 100 Иванов Гайка 200 Иванов Винт 300 Петров Болт 150 Петров Гайка 250 Сидоров Болт 1000...
    Пример 17
    Пример 17 . Прямое произведение таблиц: SELECT P.PNUM, P.PNAME, D.DNUM, D.DNAME FROM P, D; В результате получим следующую таблицу:...
    Таблица 6
    Таблица 6 PNUM PNAME DNUM DNAME 1 Иванов 1 Болт 1 Иванов 2 Гайка 1 Иванов 3 Винт 2 Петров 1 Болт 2 Петров 2 Гайка 2 Петров 3 Винт 3 Сидоров ...
    Пример 18
    Пример 18 . Соединение таблиц по произвольному условию. Рассмотрим таблицы поставщиков и деталей, которыми присвоен некоторый статую (см. пример 8 из предыдущей главы):...
    Таблица 7
    Таблица 7 PNUM PNAME PSTATUS 1 Иванов 4 2 Петров 1 3 Сидоров 2 Таблица 1 Отношение P (Поставщики)...
    Таблица 8
    Таблица 8 DNUM DNAME DSTATUS 1 Болт 3 2 Гайка 2 3 Винт 1 Таблица 2 Отношение D (Детали) Ответ на вопрос "какие поставщики имеют право поставлять какие детали?" дает следующий запрос: SELECT P.PNUM...
    Таблица 9
    Таблица 9 PNUM PNAME PSTATUS DNUM DNAME DSTATUS 1 Иванов 4 1 Болт 3 1 Иванов 4 2 Гайка 2 1 Иванов 4 3 Винт 1 2 Петров 1 3 Винт 1 3 Сидоров 2 2 ...
    Использование имен корреляции (алиасов, псевдонимов)
    Использование имен корреляции (алиасов, псевдонимов) Иногда приходится выполнять запросы, в которых таблица соединяется сама с собой, или одна таблица соединяется дважды с другой таблицей. При это...
    Пример 19. Отобрать все пары поставщиков...
    Таблица 10 PNAME1 PSTATUS1 PNAME2 PSTATUS2 Иванов 4 Петров 1 Иванов 4 Сидоров 2 Сидоров 2 Петров 1...
    Пример 20
    Пример 20 . Рассмотрим ситуацию, когда некоторые поставщики (назовем их контрагенты) могут выступать как в качестве поставщиков деталей, так и в качестве получателей. Таблицы, хранящие данные могу...
    Таблица 11
    Таблица 11 Номер контрагента NUM Наименование контрагента NAME 1 Иванов 2 Петров 3 Сидоров Таблица 3 Отношение CONTRAGENTS...
    Таблица 12
    Таблица 12 Номер детали DNUMНаименование детали DNAME 1 Болт 2 Гайка 3 Винт Таблица 4 Отношение DETAILS (Детали)...
    Таблица 13
    Таблица 13 Номер поставщика PNUMНомер получателя CNUMНомер детали DNUMПоставляемое количество VOLUME 1 2 1 100 1 3 2 200 1 3 3 300 2 3 1 150 2 3 2 250 3 1 1 1000 Таблица...
    Таблица 14
    Таблица 14 Наименование поставщика PNAMEНаименование получателя CNAMEНаименование детали DNAMEПоставляемое количество VOLUME Иванов Петров Болт 100 Иванов Сидоров Гайка 200 Иванов Сидоров Винт 300...
    Пример 21
    Пример 21 . Получить общее количество поставщиков (ключевое слово COUNT ): SELECT COUNT(*) AS N FROM P; В результате получим таблицу с одним столбцом и одной строкой, содержащей количество строк и...
    Таблица 15
    Таблица 15 N 3...
    Пример 22
    Пример 22 . Получить общее, максимальное, минимальное и среднее количества поставляемых деталей (ключевые слова SUM , MAX , MIN , AVG ): SELECT SUM(PD.VOLUME) AS SM, MAX(PD.VOLUME) AS MX, MIN(PD.V...
    Таблица 16
    Таблица 16 SM MX MN AV 2000 1000 100 333.33333333...
    Пример 23
    Пример 23 . Для каждой детали получить суммарное поставляемое количество (ключевое слово GROUP BY …): SELECT PD.DNUM, SUM(PD.VOLUME) AS SM GROUP BY PD.DNUM; Этот запрос будет выполняться следующим...
    Таблица 17
    Таблица 17 DNUM SM 1 1250 2 450 3 300 Замечание . В списке отбираемых полей оператора SELECT, содержащего раздел GROUP BY можно включать только агрегатные функции и поля, которые входят в условие...
    Пример 24
    Пример 24 . Получить номера деталей, суммарное поставляемое количество которых превосходит 400 (ключевое слово HAVING …): Замечание . Условие, что суммарное поставляемое количество должно быть бол...
    Таблица 18
    Таблица 18 DNUM SM 1 1250 2 450 Замечание . В одном запросе могут встретиться как условия отбора строк в разделе WHERE, так и условия отбора групп в разделе HAVING. Условия отбора групп нельзя пер...
    Использование подзапросов
    Использование подзапросов Очень удобным средством, позволяющим формулировать запросы более понятным образом, является возможность использования подзапросов, вложенных в основной запрос....
    Пример 25
    Пример 25 . Получить список поставщиков, статус которых меньше максимального статуса в таблице поставщиков (сравнение с подзапросом): SELECT * FROM P WHERE P.STATYS (SELECT MAX(P.STATUS) FROM P);...
    Пример 26
    Пример 26 . Использование предиката IN . Получить список поставщиков, поставляющих деталь номер 2: SELECT * FROM P WHERE P.PNUM IN (SELECT DISTINCT PD.PNUM FROM PD WHERE PD.DNUM = 2); Замечание ....
    Пример 27
    Пример 27 . Использование предиката EXIST . Получить список поставщиков, поставляющих деталь номер 2: SELECT * FROM P WHERE EXIST (SELECT * FROM PD WHERE PD.PNUM = P.PNUM AND PD.DNUM = 2); Замечан...
    Пример 28
    Пример 28 . Использование предиката NOT EXIST . Получить список поставщиков, не поставляющих деталь номер 2: SELECT * FROM P WHERE NOT EXIST (SELECT * FROM PD WHERE PD.PNUM = P.PNUM AND PD.DNUM =...
    Пример 29
    Пример 29 . Получить имена поставщиков, поставляющих все детали: SELECT DISTINCT PNAME FROM P WHERE NOT EXIST (SELECT * FROM D WHERE NOT EXIST (SELECT * FROM PD WHERE PD.DNUM = D.DNUM AND PD.PNUM...
    Пример 30
    Пример 30 . Получить имена поставщиков, имеющих статус, больший 3 или поставляющих хотя бы одну деталь номер 2 (объединение двух подзапросов - ключевое слово UNION ): SELECT P.PNAME FROM P WHERE P...
    Пример 31
    Пример 31 . Получить имена поставщиков, имеющих статус, больший 3 и одновременно поставляющих хотя бы одну деталь номер 2 (пересечение двух подзапросов - ключевое слово INTERSECT ): SELECT P.PNAME...
    Пример 32
    Пример 32 . Получить имена поставщиков, имеющих статус, больший 3, за исключением тех, кто поставляет хотя бы одну деталь номер 2 (разность двух подзапросов - ключевое слово EXCEPT ): SELECT P.PNA...
    Bnf-нотация
    BNF-нотация Опишем синтаксис оператора выборки данных (оператора SELECT) более точно. При описании синтаксиса операторов обычно используются условные обозначения, известные как стандартные формы Б...
    Синтаксис оператора выборки
    Синтаксис оператора выборки В довольно сильно упрощенном виде оператор выборки данных имеет следующий синтаксис (для некоторых элементов мы дадим не BNF-определения, а словесное описание): Операто...
    Синтаксис соединенных таблиц
    Синтаксис соединенных таблиц В разделе FROM оператора SELECT можно использовать соединенные таблицы. Пусть в результате некоторых операций мы получаем таблицы A и B. Такими операциями могут быть,...
    Синтаксис условных выражений раздела where
    Синтаксис условных выражений раздела WHERE Условное выражение, используемое в разделе WHERE оператора SELECT должно вычисляться для каждой строки-кандидата, отбираемой оператором SELECT. Условное...
    Пример 33
    Пример 33 . Сравнение поля таблицы и скалярного значения:POSTAV.VOLUME 100...
    Пример 34
    Пример 34 . Сравнение двух сконструированных строк:(PD.PNUM, PD.DNUM) = (1, 25) Этот пример эквивалентен условному выражениюPD.PNUM = 1 AND PD.DNUM = 25 Предикат between ::= Конструктор значений с...
    Пример 35
    Пример 35 . PD.VOLUME BETWEEN 10 AND 100 Предикат in ::= Конструктор значений строки [ NOT ] IN {( Select-выражение ) | ( Выражение для вычисления значения .,..)}...
    Пример 36
    Пример 36 . P.PNUM IN (SELECT PD.PNUM FROM PD WHERE PD.DNUM=2)...
    Пример 37
    Пример 37 . P.PNUM IN (1, 2, 3, 5) Предикат like ::= Выражение для вычисления значения строки-поиска [ NOT ] LIKE Выражение для вычисления значения строки-шаблона [ ESCAPE Символ ] Замечание . Пре...
    Пример 38
    Пример 38 . P.PNUM = SOME (SELECT PD.PNUM FROM PD WHERE PD.DNUM=2) Предикат exist ::= EXIST ( Select-выражение ) Замечание . Предикат EXIST возвращает значение TRUE, если результат подзапроса (sel...
    Порядок выполнения оператора select
    Порядок выполнения оператора SELECT Для того чтобы понять, как получается результат выполнения оператора SELECT, рассмотрим концептуальную схему его выполнения. Эта схема является именно концептуа...
    Стадия 1. Выполнение одиночного оператора select
    Стадия 1. Выполнение одиночного оператора SELECT Если в операторе присутствуют ключевые слова UNION, EXCEPT и INTERSECT, то запрос разбивается на несколько независимых запросов, каждый из которых...
    Шаг 1 (from)
    Шаг 1 (FROM) . Вычисляется прямое декартовое произведение всех таблиц, указанных в обязательном разделе FROM. В результате шага 1 получаем таблицу A....
    Шаг 2 (where)
    Шаг 2 (WHERE) . Если в операторе SELECT присутствует раздел WHERE, то сканируется таблица A, полученная при выполнении шага 1. При этом для каждой строки из таблицы A вычисляется условное выражени...
    Шаг 3 (group by)
    Шаг 3 (GROUP BY) . Если в операторе SELECT присутствует раздел GROUP BY, то строки таблицы B, полученной на втором шаге, группируются в соответствии со списком группировки, приведенным в разделе G...
    Шаг 4 (having)
    Шаг 4 (HAVING) . Если в операторе SELECT присутствует раздел HAVING, то группы, не удовлетворяющие условному выражению, приведенному в разделе HAVING, исключаются. Если раздел HAVING опущен, то ср...
    Шаг 5 (select)
    Шаг 5 (SELECT) . Каждая группа, полученная на шаге 4, генерирует одну строку результата следующим образом. Вычисляются все скалярные выражения, указанные в разделе SELECT. По правилам использовани...
    Стадия 2. Выполнение операций union, except, intersect
    Стадия 2. Выполнение операций UNION, EXCEPT, INTERSECT Если в операторе SELECT присутствовали ключевые слова UNION, EXCEPT и INTERSECT, то таблицы, полученные в результате выполнения 1-й стадии, о...
    Стадия 3. Упорядочение результата
    Стадия 3. Упорядочение результата Если в операторе SELECT присутствует раздел ORDER BY, то строки полученной на предыдущих шагах таблицы упорядочиваются в соответствии со списком упорядочения, при...
    Как на самом деле выполняется оператор select
    Как на самом деле выполняется оператор SELECT Если внимательно рассмотреть приведенный выше концептуальный алгоритм вычисления результата оператора SELECT, то сразу понятно, что выполнять его непо...
    Шаг 1 (синтаксический анализ)
    Шаг 1 (Синтаксический анализ) . Поступивший запрос подвергается синтаксическому анализу. На этом шаге определяется, правильно ли вообще (с точки зрения синтаксиса SQL) сформулирован запрос. В ходе...
    Шаг 2 (преобразование в каноническую форму)
    Шаг 2 (Преобразование в каноническую форму) . Запрос во внутреннем представлении подвергается преобразованию в некоторую каноническую форму. При преобразовании к канонической форме используются ка...
    Шаг 3 (генерация планов выполнения запроса и выбор оптимального плана)
    Шаг 3 (Генерация планов выполнения запроса и выбор оптимального плана) . На этом шаге оптимизатор генерирует множество возможных планов выполнения запроса. Каждый план строится как комбинация низк...
    Шаг 4. (выполнение плана запроса)
    Шаг 4. (Выполнение плана запроса) . На этом шаге план, выбранный на предыдущем шаге, передается на реальное выполнение. Во многом качество конкретной СУБД определяется качеством ее оптимизатора. Х...
    Реализация реляционной алгебры средствами оператора select (реляционная полнота sql)
    Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL) Для того, чтобы показать, что язык SQL является реляционно полным, нужно показать, что любой реляционный операт...
    Оператор декартового произведения
    Оператор декартового произведения Реляционная алгебра: Оператор SQL: SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, … FROM A, B; или SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, … FROM A CROSS JOI...
    Оператор проекции
    Оператор проекции Реляционная алгебра: Оператор SQL: SELECT DISTINCT X, Y, …, Z FROM A;...
    Оператор выборки
    Оператор выборки Реляционная алгебра: , Оператор SQL: SELECT * FROM A WHERE c;...
    Оператор объединения
    Оператор объединения Реляционная алгебра: Оператор SQL: SELECT * FROM A UNION SELECT * FROM B;...
    Оператор вычитания
    Оператор вычитания Реляционная алгебра: Оператор SQL: SELECT * FROM A EXCEPT SELECT * FROM B Реляционный оператор переименования RENAME выражается при помощи ключевого слова AS в списке отбираемых...
    Оператор соединения
    Оператор соединения Реляционная алгебра: Оператор SQL: SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, … FROM A, B WHERE c; или SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, … FROM A CROSS JOIN B WH...
    Оператор пересечения
    Оператор пересечения Реляционная алгебра: Оператор SQL: SELECT * FROM A INTERSECT SELECT * FROM B;...
    Оператор деления
    Оператор деления Реляционная алгебра: Оператор SQL: SELECT DISTINCT A.X FROM A WHERE NOT EXIST (SELECT * FROM B WHERE NOT EXIST (SELECT * FROM A A1 WHERE A1.X = A.X AND A1.Y = B.Y)); Замечание . О...
    Выводы
    Выводы Фактически стандартным языком доступа к базам данных в настоящее время стал язык SQL (Structured Query Language). Язык SQL оперирует терминами, несколько отличающимися от терминов реляционн...
    Этапы разработки базы данных
    Этапы разработки базы данных Целью разработки любой базы данных является хранение и использование информации о какой-либо предметной области. Для реализации этой цели имеются следующие инструменты...
    Примеры понятий - "сотрудник"...
    Примеры понятий - "сотрудник", "отдел", "проект", "зарплата". Примеры взаимосвязей между понятиями - "сотрудник числится ровно в одном отделе", "сотрудник может выполнять несколько проектов", "над...
    Критерии оценки качества логической модели данных
    Критерии оценки качества логической модели данных Цель данной главы - описать некоторые принципы построения хороших логических моделей данных . Хороших в том смысле, что решения, принятые в процес...
    Адекватность базы данных предметной области
    Адекватность базы данных предметной области База данных должна адекватно отражать предметную область. Это означает, что должны выполняться следующие условия: Состояние базы данных в каждый момент...
    Легкость разработки и сопровождения базы данных
    Легкость разработки и сопровождения базы данных Практически любая база данных, за исключением совершенно элементарных, содержит некоторое количество программного кода в виде триггеров и хранимых п...
    Скорость операций обновления данных (вставка, обновление, удаление)
    Скорость операций обновления данных (вставка, обновление, удаление) На уровне логического моделирования мы определяем реляционные отношения и атрибуты этих отношений. На этом уровне мы не можем оп...
    Скорость операций выборки данных
    Скорость операций выборки данных Одно из назначений базы данных - предоставление информации пользователям. Информация извлекается из реляционной базы данных при помощи оператора SQL - SELECT. Одно...
    Основной пример
    Основной пример Рассмотрим в качестве предметной области некоторую организацию, выполняющую некоторые проекты. Модель предметной области опишем следующим неформальным текстом: Сотрудники организац...
    1нф (первая нормальная форма)
    1НФ (Первая Нормальная Форма) Понятие первой нормальной формы уже обсуждалось в главе 2. Первая нормальная форма ( 1НФ ) - это обычное отношение. Согласно нашему определению отношений, любое отнош...
    Таблица 1
    Таблица 1 Н_СОТР ФАМ Н_ОТД ТЕЛ Н_ПРО ПРОЕКТ Н_ЗАДАН 1 Иванов 1 11-22-33 1 Космос 1 1 Иванов 1 11-22-33 2 Климат 1 2 Петров 1 11-22-33 1 Космос 2 3 Сидоров 2 33-22-11Аномалии обновления
    Аномалии обновления Даже одного взгляда на таблицу отношения СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ достаточно, чтобы увидеть, что данные хранятся в ней с большой избыточностью . Во многих строках повторяются...
    Аномалии вставки (insert)
    Аномалии вставки (INSERT) В отношение СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ нельзя вставить данные о сотруднике, который пока не участвует ни в одном проекте. Действительно, если, например, во втором отделе п...
    Аномалии обновления (update)
    Аномалии обновления (UPDATE) Фамилии сотрудников, наименования проектов, номера телефонов повторяются во многих кортежах отношения. Поэтому если сотрудник меняет фамилию, или проект меняет наимено...
    Аномалии удаления (delete)
    Аномалии удаления (DELETE) При удалении некоторых данных может произойти потеря другой информации. Например, если закрыть проект "Космос" и удалить все строки, в которых он встречается, то будут п...
    Функциональные зависимости
    Функциональные зависимости Отношение СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ находится в 1НФ, при этом, как было показано выше, логическая модель данных не адекватна модели предметной области. Таким образом, пе...
    Определение функциональной зависимости...
    !) применяется метод нормализации отношений. Нормализация основана на понятии функциональной зависимости атрибутов отношения....
    Определение 1
    Определение 1 . Пусть - отношение. Множество атрибутов функционально зависимо от множества атрибутов ( функционально определяет ) тогда и только тогда, когда для любого состояния отношения для люб...
    Пример 1
    Пример 1 . В отношении СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ можно привести следующие примеры функциональных зависимостей: Зависимость атрибутов от ключа отношения: { Н_СОТР , Н_ПРО } ФАМ { Н_СОТР , Н_ПРО } Н...
    Функциональные зависимости отношений и математическое понятие функциональной зависимости
    Функциональные зависимости отношений и математическое понятие функциональной зависимости Функциональная зависимость атрибутов отношения напоминает понятие функциональной зависимости в математике....
    Определение 2
    Определение 2 . Функциональная зависимость ( функция ) - это тройка объектов , где - множество ( область определения ), - множество ( множество значений ), - правило, согласно которому каждому эле...
    Определение функциональной зависимости...
    Определение функциональной зависимости в отношении гарантирует, что найденное значение не зависит от выбора кортежа , поэтому правило определено корректно. Отличие от математического понятия отнош...
    Определение 3
    Определение 3 . Отношение находится во второй нормальной форме ( 2НФ ) тогда и только тогда, когда отношение находится в 1НФ и нет неключевых атрибутов, зависящих от части сложного ключа . ( Неклю...
    Таблица 2
    Таблица 2 Н_СОТР ФАМ Н_ОТД ТЕЛ 1 Иванов 1 11-22-33 2 Петров 1 11-22-33 3 Сидоров 2 33-22-11 Таблица 2 Отношение СОТРУДНИКИ_ОТДЕЛЫ Отношение ПРОЕКТЫ ( Н_ПРО , ПРОЕКТ ): Функциональные зависимости:...
    Таблица 3
    Таблица 3 Н_ПРО ПРОЕКТ 1 Космос 2 Климат Таблица 3 Отношение ПРОЕКТЫ Отношение ЗАДАНИЯ ( Н_СОТР , Н_ПРО , Н_ЗАДАН ): Функциональные зависимости: { Н_СОТР , Н_ПРО } Н_ЗАДАН...
    Таблица 4
    Таблица 4 Н_СОТР Н_ПРО Н_ЗАДАН 1 1 1 1 2 1 2 1 2 3 1 3 3 2 2 Таблица 4 Отношения ЗАДАНИЯ...
    Анализ декомпозированных отношений
    Анализ декомпозированных отношений Отношения, полученные в результате декомпозиции, находятся в 2НФ. Действительно, отношения СОТРУДНИКИ_ОТДЕЛЫ и ПРОЕКТЫ имеют простые ключи, следовательно автомат...
    Оставшиеся аномалии вставки (insert)
    Оставшиеся аномалии вставки (INSERT) В отношение СОТРУДНИКИ_ОТДЕЛЫ нельзя вставить кортеж (4, Пушников, 1, 33-22-11), т.к. при этом получится, что два сотрудника из 1-го отдела (Иванов и Пушников)...
    Оставшиеся аномалии обновления (update)
    Оставшиеся аномалии обновления (UPDATE) Одни и те же номера телефонов повторяются во многих кортежах отношения. Поэтому если в отделе меняется номер телефона, то такие изменения необходимо одновре...
    Оставшиеся аномалии удаления (delete)
    Оставшиеся аномалии удаления (DELETE) При удалении некоторых данных по-прежнему может произойти потеря другой информации. Например, если удалить сотрудника Сидорова, то будет потеряна информация о...
    Определение 4
    Определение 4 . Атрибуты называются взаимно независимыми , если ни один из них не является функционально зависимым от другого....
    Определение 5
    Определение 5 . Отношение находится в третьей нормальной форме ( 3НФ ) тогда и только тогда, когда отношение находится в 2НФ и все неключевые атрибуты взаимно независимы . Отношение СОТРУДНИКИ_ОТД...
    Таблица 5
    Таблица 5 Н_СОТР ФАМ Н_ОТД 1 Иванов 1 2 Петров 1 3 Сидоров 2 Таблица 5 Отношение СОТРУДНИКИ Отношение ОТДЕЛЫ ( Н_ОТД , ТЕЛ ): Функциональные зависимости: Зависимость номера телефона от номера отде...
    Таблица 6
    Таблица 6 Н_ОТД ТЕЛ 1 11-22-33 2 33-22-11 Таблица 6 Отношение ОТДЕЛЫ Обратим внимание на то, что атрибут Н_ОТД , не являвшийся ключевым в отношении СОТРУДНИКИ_ОТДЕЛЫ , становится потенциальным клю...
    Алгоритм нормализации (приведение к 3нф)
    Алгоритм нормализации (приведение к 3НФ) Итак, алгоритм нормализации (т.е. алгоритм приведения отношений к 3НФ) описывается следующим образом....
    Шаг 1 (приведение к 1нф)
    Шаг 1 (Приведение к 1НФ) . На первом шаге задается одно или несколько отношений, отображающих понятия предметной области. По модели предметной области (не по внешнему виду полученных отношений!) в...
    Шаг 2 (приведение к 2нф)
    Шаг 2 (Приведение к 2НФ) . Если в некоторых отношениях обнаружена зависимость атрибутов от части сложного ключа, то проводим декомпозицию этих отношений на несколько отношений следующим образом: т...
    Шаг 3 (приведение к 3нф)
    Шаг 3 (Приведение к 3НФ) . Если в некоторых отношениях обнаружена зависимость некоторых неключевых атрибутов других неключевых атрибутов, то проводим декомпозицию этих отношений следующим образом:...
    Сравнение нормализованных и ненормализованных моделей
    Сравнение нормализованных и ненормализованных моделей Соберем воедино результаты анализа критериев, по которым мы хотели оценить влияние логического моделирования данных на качество физических мод...
    Таблица 7
    Таблица 7 Критерий Отношения слабо нормализованы (1НФ, 2НФ) Отношения сильно нормализованы (3НФ) Адекватность базы данных предметной области ХУЖЕ (-) ЛУЧШЕ (+) Легкость разработки и сопровождения...
    Oltp и olap-системы
    OLTP и OLAP-системы Можно выделить некоторые классы систем, для которых больше подходят сильно или слабо нормализованные модели данных. Сильно нормализованные модели данных хорошо подходят для так...
    Теорема хеза как было показано...
    атрибуты исходного отношения. Т.е., при декомпозиции не должны теряться атрибуты отношений. Но при декомпозиции также не должны потеряться и сами данные. Данные можно считать не потерянными в том...
    Определение 6
    Определение 6 . Проекция отношения на множество атрибутов называется собственной , если множество атрибутов является собственным подмножеством множества атрибутов отношения (т.е. множество атрибут...
    Определение 7
    Определение 7 . Собственные проекции и отношения называются декомпозицией без потерь , если отношение точно восстанавливается из них при помощи естественного соединения для любого состояния отноше...
    Пример 2
    Пример 2 . Пусть дано отношение :...
    Таблица 8
    Таблица 8 НОМЕР ФАМИЛИЯ ЗАРПЛАТА 1 Иванов 1000 2 Петров 1000 Таблица 7 Отношение Рассмотрим первый вариант декомпозиции отношения на два отношения:...
    Таблица 9
    Таблица 9 НОМЕР ЗАРПЛАТА 1 1000 2 1000 Таблица 8 Отношение...
    Таблица 10
    Таблица 10 ФАМИЛИЯ ЗАРПЛАТА Иванов 1000 Петров 1000 Таблица 9 Отношение Естественное соединение этих проекций, имеющих общий атрибут "ЗАРПЛАТА", очевидно, будет следующим (каждая строка одной прое...
    Таблица 11
    Таблица 11 НОМЕР ФАМИЛИЯ ЗАРПЛАТА 1 Иванов 1000 1 Петров 1000 2 Иванов 1000 2 Петров 1000 Таблица 10 Отношение Итак, данная декомпозиция не является декомпозицией без потерь, т.к. исходное отношен...
    Таблица 12
    Таблица 12 НОМЕР ФАМИЛИЯ 1 Иванов 2 Петров Таблица 11 Отношение...



Содержание раздела