Реляционные базы данных.ppt
- Количество слайдов: 51
Реляционные базы данных Язык запросов SQL
Упрощенная схема СУБД в архитектуре клиент/сервер
Пример таблицы БД "Стипендия"
Пояснение понятий реляционных БД
Виды отношений в реляционных системах n n n Именованное - представляет собой переменное отношение, определяемое в СУБД путем операторов создания и, как правило, необходимое для более удобного представления информации для пользователя. Базовое отношение - являющееся непосредственной важной частью БД, поэтому при проектировании им дают собственное наименование. Производное отношение - то, которое было определено через другие (как правило, базовые) отношения путем использования средств СУБД. Представление - фактически является именованным производным отношением, при этом представление выражается исключительно через операторы СУБД, примененные к именованным отношениям, поэтому их физически в БД не существует. Результат запроса - это неименованное производное отношение, содержащее данные - результат конкретного запроса. Результат запроса в БД не хранится, а существует только до тех пор, пока он необходим пользователю. Хранимое отношение - то, которое физически поддерживается в памяти компьютера. К хранимым, в большинстве случаев, относятся базовые отношения.
Связь - это ассоциирование двух или более отношений. Связь "один к одному"
Связь - это ассоциирование двух или более отношений. Связь "один ко многим"
Связь - это ассоциирование двух или более отношений. Связь "многие к одному"
Связь - это ассоциирование двух или более отношений. Связь "многие ко многим"
Множественные и тренарные связи
Ключ или потенциальный ключ – это минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый кортеж. n n Каждое отношение обладает хотя бы одним возможным ключом. Один из них принимается за первичный ключ. Внешний ключ. Если отношение С связывает отношения А и В, то оно должно включать внешние ключи, соответствующие первичным ключам отношений А и В
Целостность данных n n операция каскадируется - то есть при обновлении первичного ключа происходит обновление внешнего ключа в связанном отношении. Например, обновление первичного ключа в отношении, где хранится информация о сотруднике приводит к обновлении внешнего ключа в отношении с информацией о его заработной плате; операция ограничивается - то есть обновляются лишь те первичные ключи, для которых связанной информации в другом отношении нет. Если таковая информация имеется, то обновление сделать нельзя. Например, обновление первичного ключа в отношении, где хранится информация о сотруднике, возможно в том случае, если информация о его заработной плате в связанном отношении отсутствует.
Основные операторы реляционной алгебры
Реляционное исчисление Пусть СТУД 1 и СТУД 2 - две кортежные переменные, определенные на отношении СТУДЕНТЫ. Тогда, формула EXISTS СТУД 2(СТУД 1. СТУД_СТИП>СТУД 2. СТУД_СТИП) для текущего кортежа переменной СТУД 1 принимает значение "истина" только в том случае, если во всем отношении СТУДЕНТЫ найдется такой кортеж, связанный с переменной СТУД 2, что значение его атрибута СТУД_СТИП удовлетворяет внутреннему условию сравнения.
SQL (Structured Query Language) n n n это сокращенное название структурированного языка запросов, дающего возможность создавать и работать в реляционных БД. Независимость от специфики компьютерных технологий сделало его, основным стандартным языком БД. Рассматриваемый язык SQL ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц -отношений. В 1987 году SQL стал стандартом языков для профессиональных реляционных СУБД и начал внедряться во все распространенные системы.
Управление базами данных с помощью SQL Структура БД
Синтаксис операторов n n n Полное имя таблицы состоит из имени владельца таблицы и собственно ее имени, разделенных точкой. Например: DENIS. USP Полное имя поля состоит из имени таблицы, содержащей столбец, и имени поля, разделенные точкой. Например: USP. OCENKA Если поле находится в таблице, владельцем которой является другой пользователь, то в полном имени следует использовать имя таблицы. Например: DENIS. USP. OCENKA
Элементы команд SQL n n Основные элементы - это создаваемые блоки языка; когда SQL исследует команду, то он сначала оценивает каждый символ в тексте команды в терминах этих элементов. Разделители<separator> отделяют одну часть команды от другой; все что находится между разделителями<separator> обрабатывается как модуль. На основании этого разделения SQL интерпретирует команду. Функциональные элементы - это разнообразные составные части команд, отличающиеся от ключевых слов, которые могут интерпретироваться как модули. Фактически это части команды, отделяемые с помощью разделителей <separator>, имеющих специальное значение в SQL. Функциональные элементы могут определяться в терминах друга или даже в собственных терминах.
Основные элементы языка SQL n n n n <separator> - разделитель; <comment> - комментарий, не обрабатываемый как команда системой; <identifier> - идентификатор элемента, согласно стандарту ANSI, символы должны быть набраны в верхнем регистре, а сам идентификатор не должен быть длиннее 18 -ти символов. <underscore> - знак "_"; <percent sign> - знак "%"; <string> - любой печатаемый текст в одиночных кавычках; <delimiter> - любой из следующих знаков: ", ", "(", ")", "<", ">", ": ", "=", "+", "-", "|", "<>", ">=", "<=", <string>, а также двойная кавычка; <SQL term> - окончание вложенной команды.
Функциональные элементы команд SQL n n n n n <query> - предложение SELECT; <value expression> <primary> | <operator> <value expression> конструкция, в которой <operator> может быть любым из следующих: "+", "-", "/", "*"; <primary> - может быть <column name> - названием поля таблицы или математическим выражением; <table name> - имя таблицы данных <identifier>; <column spec> - конструкция следующей структуры [<table name> | <alias>. ]<column name>, где <alias> - определенное системой условное логическое имя таблицы данных; <colconstraint> NOT NULL | UNIQUE | CHECK (<predicate>) | PRIMARY KEY | REFERENCES <table name>[(<column name>)] - условие проверки столбца; <defvalue> - значение по умолчанию, задаваемое <value expression>; <data type> - описание допустимого типа данных; <cursor name> - наименование представления данных (курсора), определенного с помощью <identifier>; <index name> - наименование индекса, определенного с помощью <identifier>
CREATE INDEX - создать индекс CREATE [UNIQUE] INDEX <Index name> ON <table name> (<column list>); n Эта команда создает эффективный индекс с быстрым доступом для поиска строк содержащих обозначенные столбцы. Если атрибут UNIQUE - указан, то таблица не сможет содержать дубликатов - двойников значений в этих столбцах.
Индексирование файла оценок по полю PN
CREATE TABLE - создать таблицу CREATE TABLE <table name> ({<column name> <data type>[<size>] [ <colconstralnt>. . . ] [<defvalue>]}. , . . <tabconstraint>. , . . ); n Команда создает таблицу в БД и она будет принадлежать ее создателю. Столбцы будут рассматриваться в поименном порядке. <data type> определяет тип данных, который будет содержать столбец. Значение размера <size> зависит от типа данных <data type>. Выражения <colconstraint> и <tabconstraint> налагают ограничения на значения, которые могут быть введены в столбец. <defvalue> определяет значение по умолчанию, которое будет вставлено автоматически, если никакого другого значения не указано для этой строки.
CREATE VIEW - создать представление CREATE VIEW <table name> AS <query> [WITH CHECK OPTION]; n Представление обрабатывается так же, как любая таблица в командах SQL. Когда команда ссылается на имя таблицы <table name>, запрос <query> выполняется, и его вывод соответствует содержанию таблицы, указанной в этой команде. Некоторые представления могут модифицироваться, а это означает, что команды модификации могут выполняться в этих представлениях и передаваться в таблицу, на которую была ссылка в запросе <query>.
DELETE - удалить DELETE FROM <table name> {[WHERE <predicate>]; } | WHERE CURRENT OF <cursorname><SQL term> n Если предложение WHERE отсутствует, все строки таблицы удаляются. Если предложение WHERE использует предикат <predicate>, строки, которые ему удовлетворяют, удаляются. Если предложение WHERE имеет аргумент CURRENT OF (текущий) в имени курсора <cursor name>, строка из таблицы <table name>, на которую в данный момент имеется ссылка с помощью имени курсора <cursor name>, будет удалена.
GRANT - передать права GRANT ALL [PRIVILEGES] | {SELECT | INSERT | DELETE | UPDATE [(<column llst>)] | REFERENCES [(<column llst>)l }. , . . ON <table name>. , . . TO PUBLIC | <Authorization ID>. , . . [WITH GRANT OPTION]; n Аргумент ALL (все), с/без фразы PRIVILEGES (привилегии), включает каждую привилегию в список привилегий. PUBLIC (общий) включает всех существующих пользователей, и всех созданных в будущем. Эта команда дает возможность передать права для выполнения действий в таблице с указанным именем. REFERENCES позволяет дать права, чтобы использовать столбцы в списке столбцов <column list>, как родительский ключ для внешнего ключа. Другие привилегии состоят из права выполнять команды, для которых привилегии указаны их именами в таблице.
INSERT - вставка INSERT INTO <table name> (<column llst>) VALUES (<value llst>) | <query>; n INSERT создает одну или больше новых строк в таблице с именем <table name>. Если используется предложение VALUES , их значения вставляются в таблицу с именем <table name>, а если указан запрос <query>, то каждая строка вывода будет вставлена в таблицу с именем <table name>. Если список столбцов <column list> отсутствует, все столбцы таблицы <table name> используются по порядку.
ROLLBACK - откат транзакции ROLLBACK WORK; n Команда отменяет все изменения в БД, сделанные в течение текущей транзакции. Эта команда, кроме того, заканчивает текущую, и начинает новую транзакцию.
SELECT - выбор SELECT {DISTINCT | ALL] <value expression>. , . . } / * [INTO <host variable list>] FROM <table reference>. , . . [WHERE <predicate>] [GROUP BY <grouping column>. , . . ] [HAVING <predicate>] [ORDER BY <ordering column> [ASC | DESC] ]; n Это предложение организует запрос и выводит значения из БД. При этом, если ни ALL, ни DISTINCT не указаны, принимается ALL. Выражение <value expression> состоит из <column spec>, агрегатной функции <aggregate function>, постоянной <constant>, или любой их комбинации с операторами в допустимых выражениях. Ссылаемая таблица <table reference> состоит из имени таблицы
UPDATE - модификация UPDATE <table name> SET {<column name> = <value expression>}. , . . {[ WHERE <predlcate>]; } | {[WHERE CURRENT OF <cursorname>] <SQL term>]} n UPDATE изменяет значения в каждом столбце с именем <column name> на соответствующее значение <value expression>. Если предложение WHERE использует предикат <predicate>, то только строки таблиц, чьи текущие значения делают тот предикат <predicate> верным, могут быть изменены.
Структура обработки запроса в СУБД
Синтаксис оператора SELECT Все запросы в SQL состоят из одиночной команды SELECT с достаточно простой структурой, однако путем ее использования можно выполнить сложную обработку данных. В самой простой форме, команда SELECT просто обращается к БД, чтобы извлечь информацию из таблицы. Например, можно вывести таблицу студентов, дав следующий запрос: SELECT SNUM, SFAM, SIMA, SOTCH, STIP FROM STUDENTS; n
Синтаксис оператора SELECT SNUM, SFAM, SIMA, SOTCH, STIP FROM STUDENTS; Вывод для этого запроса показан ниже: n SNUM SFAM SIMA SOTCH STIP n ---------------------n 3412 Поляков Анатолий Алексеевич 25. 50 n 3413 Старова Любовь Михайловна 17. 00 n 3414 Гриценко Владимир Николаевич 0. 00 n 3415 Котенко Анатолий Николаевич 0. 00 n 3416 Нагорный Евгений Васильевич 25. 50
Синтаксис оператора SELECT Если необходимо получить каждое поле таблицы, имеется необязательное сокращение в виде символа "звездочка" (*), которое можно использовать для вывода полного списка полей следующим образом: SELECT * FROM STUDENTS; что приведет к тому же результату, что и предыдущая команда. n
Синтаксис оператора SELECT Команда SELECT способна извлечь строго определенную информацию из таблицы. Например, при необходимости вывода только определенных полей таблицы n SELECT SNUM, SFAM, STIP FROM STUDENTS; n будет производить вывод, показанный ниже: n SNUM SFAM STIP n ----------n 3412 Поляков 25. 50 n 3413 Старова 17. 00 n 3414 Гриценко 0. 00 n 3415 Котенко 0. 00 n 3416 Нагорный 25. 50 n
При работе с данными очень часто возникает потребность в удалении избыточных данных. Это реализуется используя DISTINCT - аргумент который обеспечивает возможностью устранять двойные значения из предложения SELECT SNUM FROM USP; даст следующий вывод, однако в нем есть записи дубликаты: n n n n SNUM ---3412 3413 3414 3412 3416 Для получения списка без дубликатов: SELECT DISTINCT SNUM FROM USP; n n n n SNUM ---3412 3413 3414 3416
Использование условий поиска для отбора строк WHERE - предложение команды SELECT, которое позволяет устанавливать предикаты, условие которых может быть или верным или неверным для любой записи таблицы. SELECT SFAM, STIP FROM STUDENTS WHERE STIP=25. 50; n Вывод для этого запроса будет следующий: n SFAM STIP n --------n Поляков 25. 50 n Нагорный 25. 50 n
Использование условий поиска для отбора строк Предположим, что необходимо вывести список студентов, получающих стипендию, т. е. для которых STIP>0. Тогда воспользуемся следующим запросом: SELECT * FROM STUDENTS WHERE STIP > 0; n Результат запроса будет следующий: n SNUM SFAM SIMA SOTCH STIP n ---------------------n 3412 Поляков Анатолий Алексеевич 25. 50 n 3413 Старова Любовь Михайловна 17. 00 n 3416 Нагорный Евгений Васильевич 25. 50 n
Использование условий поиска для отбора строк n n n n Связывая предикаты с булевыми операторами, можно увеличить возможности выборки данных. Например, по таблице с данными об успеваемости можно получить информацию о всех студентах, сдавших предмет с кодом 2003: SELECT * FROM USP WHERE OCENKA >=3 AND PNUM = 2003; В результате будет получено следующее: UNUM OCENKA UDATE SNUM PNUM -----------------1002 4 10/06/1999 3413 2003 1004 4 12/06/1999 3412 2003
Использование условий поиска для отбора строк n n n n n Условие NOT может использоваться для инвертирования логических значений. Например, для вывода информации о студентах, у которых оценки не являются 3, можно воспользоваться следующим запросом: SELECT * FROM USP WHERE NOT(OCENKA = 3); Вывод этого запроса следующий: UNUM OCENKA UDATE SNUM PNUM -----------------1001 5 10/06/1999 3412 2001 1002 4 10/06/1999 3413 2003 1004 4 12/06/1999 3412 2003 1005 5 12/06/1999 3416 2004
Использование условий поиска для отбора строк n n n n Оператор IN определяет набор значений, в которое данное значение может или не может быть включено. Например, если в соответствии с учебной БД возникает необходимость в выводе информации обо всех студентах, имя которых Анатолий или Владимир, нужно использовать следующий запрос: SELECT * FROM STUDENTS WHERE SIMA IN ('Анатолий', 'Владимир'); Результат : SNUM SFAM SIMA SOTCH STIP ---------------------3412 Поляков Анатолий Алексеевич 25. 50 3414 Гриценко Владимир Николаевич 0. 00 3415 Котенко Анатолий Николаевич 0. 00
Использование условий поиска для отбора строк n n n n n Оператор BETWEEN определяет диапазон, значения, в который должны умещаться искомые значения, что и делает предикат верным. SELECT SNUM, OCENKA FROM USP WHERE OCENKA BETWEEN 3 AND 5; Результат : SNUM OCENKA -------3412 5 3413 4 3414 3 3412 4 3416 5
Использование условий поиска для отбора строк Чтобы найти сумму всей выплаченной стипендии в таблице с данными о студентах, можно использовать следующий запрос: SELECT SUM (STIP) FROM STUDENTS; вывод которого состоит из единственного числа 68. 00. n
Использование условий поиска для отбора строк Предположим, что необходимо найти максимальную величину проиндексированной (в примере, увеличенной вдвое) стипендии. Для каждой строки таблицы такой запрос должен умножать STIP на 2 и выбирать самое большое значение, которое будет найдено. Для этого можно воспользоваться следующим: SELECT MAX (STIP*2) FROM STUDENTS; n В качестве результата здесь будет получено число 51. 00. n
Использование условий поиска для отбора строк n n n n n Команда GROUP BY позволяет определять подмножество значений в поле в терминах другого поля, и применять функцию агрегата к такому подмножеству. Например, если возникает необходимость в определении наименьшей оценки, полученной каждым студентом: SELECT SNUM, MIN (OCENKA) FROM USP GROUP BY SNUM; Вывод : SNUM -------3412 4 3413 4 3414 3 3416 5
Сортировка результатов запроса n n n n n Для упорядочения вывода полей таблиц SQL использует команду ORDER BY, позволяя сортировать вывод запроса согласно значениям в том или ином количестве выбранных столбцов. Запрос, выводящий таблицу с информацией о студентах в алфавитном порядке фамилий: SELECT * FROM STUDENTS ORDER BY SFAM ASC; SNUM SFAM SIMA SOTCH STIP ---------------------3414 Гриценко Владимир Николаевич 0. 00 3415 Котенко Анатолий Николаевич 0. 00 3416 Нагорный Евгений Васильевич 25. 50 3412 Поляков Анатолий Алексеевич 25. 50 3413 Старова Любовь Михайловна 17. 00
Объединение результатов нескольких запросов n n n n Для размещения нескольких запросов вместе и объединения их вывода используют предложение UNION. Предложение UNION объединяет вывод двух или более SQL запросов в единый набор строк и столбцов. Например, для получения списка всех студентов и преподавателей, фамилии которых заключены между буквами К и С, можно воспользоваться запросом: SELECT SFAM, SIMA, SOTCH FROM STUDENTS WHERE SFAM BETWEEN 'К' AND 'С' UNION SELECT TFAM, TIMA, TOTCH FROM TEACHERS WHERE TFAM BETWEEN 'К' AND 'С'; Результаты этого запроса показаны ниже: ----------------Поляков Анатолий Алексеевич Нагорный Евгений Васильевич Позднякова Любовь Алексеевна
Особенности многотабличных запросов n n n n n Предположим необходимо поставить в соответствие преподавателю учебные предметы, которые он ведет. Фактически SQL придется выбирать из таблицы преподавателей соответствующий ему код и, просматривая таблицу предметов, осуществлять поиск соответствующего кода: SELECT TEACHERS. TFAM, PREDMET. PNAME FROM TEACHERS, PREDMET WHERE TEACHERS. TNUM = PREDMET. TNUM; TFAM PNAME -----------Викулина Физика Костыркин Химия Казанко Математика Позднякова Экономика Загарийчук Философия
Транзакции и параллелизм n n Под транзакцией понимается неделимая с точки зрения воздействия на БД последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации) такая, что возможны два итога: результаты всех операторов, входящих в транзакцию, соответствующим образом отображаются в БД; воздействие всех этих операторов полностью отсутствует. В СУБД транзакция начинается с оператора BEGIN. При этом если транзакция завершена оператором COMMIT, то результаты фиксируются во внешней памяти; при завершении транзакции оператором ROLLBACK результаты отсутствуют во внешней памяти.
Требования к системе n Требования к аппаратуре и программному обеспечению клиентских и серверных компьютеров различаются в зависимости от вида использования системы. Если разделение между клиентом и сервером достаточно жесткое, то пользователям, работающим на рабочих станциях, абсолютно все равно, какая аппаратура и операционная система установлены на сервере лишь бы он справлялся с потоком запросов. Если же возникают потребности в перераспределения функций между клиентом и сервером, то возникает проблема, связанная с выбором аппаратуры и операционной системы, используемой в клиентской части.
Реляционные базы данных Язык запросов SQL
Реляционные базы данных.ppt