Да-да, все данные с Вашей странички Вконтакте и на Фейсбуке также хранятся в базе данных.
Это все лежит в базе данных
Каждый Ваш запрос в Google или Яндексе – это, прежде всего обращение к базе данных.
3. Сдать все лабораторные.
4. Написать модуль (так, чтобы преподавателю не было стыдно).
5. Сдать ДЗ.
Откуда берутся баллы?
Данные
Информация
Информация о посещаемости
Информация об оценках
Информация о том, будет ли у студента стипендия
Другая информация
Интерпретация
Прием информации
Хранение и преобразование информации
Вывод информации
Источник
информации
Потребительинформации
Информационная система
Обратная связь
ИС предназначена для своевременного обеспечения надлежащих людей надлежащей информацией.
Результатом функционирования информационных систем является информационная продукция — документы, информационные массивы, базы данных и информационные услуги.
[ГОСТ Р 52653-2006].
Схема базы данных (Database schema) – формальное описание данных в соответствии с конкретной схемой данных
[ГОСТ 34.321-96].
Схема данных (Data schema) или Модель данных – логическое представление организации данных [ГОСТ 34.321-96].
Модели данных
Анализ предметной области
Инфологическая модель позволяет представить предметную область в формализованном виде. При этом используются наиболее естественные для человека формы представления той информации, которую предполагается хранить в создаваемой базе данных. Поэтому для построения инфологической модели данных используют различные виды семантических моделей: семантические сети, модель «сущность-отношение» (ER-модель), IDEF1X-модель и др.
IDEF1X (IDEF1 Extended) — Data Modeling — методология моделирования баз данных на основе модели «сущность-связь».
Применяется для построения информационной модели, которая представляет структуру информации, необходимой для поддержки функций производственной системы или среды.
Экземпляр сущности - это конкретный представитель данной сущности.
Например, представителем сущности "Сотрудник" может быть "Сотрудник Фартушный".
Экземпляры сущностей должны быть различимы, т.е. сущности должны иметь некоторые свойства, уникальные для каждого экземпляра этой сущности.
Атрибут сущности - это именованная характеристика, являющаяся некоторым свойством сущности.
Наименование атрибута должно быть выражено существительным в единственном числе (возможно, с характеризующими прилагательными).
Примерами атрибутов сущности "Сотрудник" могут быть такие атрибуты как "Табельный номер", "Фамилия", "Имя", "Отчество", "Должность", "Зарплата" и т.п.
Атрибуты изображаются в пределах прямоугольника, определяющего сущность.
Ключ сущности - это неизбыточный набор атрибутов, значения которых в совокупности являются уникальными для каждого экземпляра сущности.
Это минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности.
Ключевые атрибуты изображаются на диаграмме подчеркиванием.
Связь - это некоторая ассоциация между двумя сущностями.
Одна сущность может быть связана с другой сущностью или сама с собою.
Например, связи между сущностями могут выражаться следующими фразами –
"СОТРУДНИК может иметь несколько ДЕТЕЙ", "каждый СОТРУДНИК обязан числиться ровно в одном ОТДЕЛЕ".
Графически связь изображается линией, соединяющей две сущности.
Между объектами существуют связи, каждый объект может включать в себя несколько объектов более низкого уровня. Такие объекты находятся в отношении предка (объект более близкий к корню) к потомку (объект более низкого уровня), при этом возможна ситуация, когда объект-предок не имеет потомков или имеет их несколько, тогда как у объекта-потомка обязательно только один предок. Объекты, имеющие общего предка, называются близнецами (в программировании применительно к структуре данных «дерево» устоялось название братья).
Корень
Потомок
Предок
Порядок обхода
Разница между иерархической моделью данных и сетевой состоит в том, что в иерархических структурах запись-потомок должна иметь в точности одного предка, а в сетевой структуре данных у потомка может иметься любое число предков.
В сетевой модели возможны связи всех информационных объектов со всеми.
Например, каждый преподаватель может обучать много студентов и каждый студент может обучаться у многих преподавателей
Использование иерархической и сетевой моделей ускоряет доступ к информации,
но требует значительных ресурсов памяти,
так как каждый элемент данных содержит ссылки на другие элементы.
Характерна сложность реализации СУБД.
Разработана в начале 1970-х годов Эдгаром Ф. Коддом.
Даталогическая модель проектируется на основании информационной модели, посредством ее нормализации и приведения к третьей нормальной форме.
Нормализация – это последовательный процесс разбиения и преобразования некоторого небольшого исходного набора таблиц для построения набора взаимосвязанных таблиц в нормальных формах.
Определение для альтернативно одаренных
Нормализация – это когда у нас было много таблиц, а мы сделаем еще больше, чтобы они соответствовали каким-то там правилам.
Всего существует восемь НФ:
– 1–6 НФ;
– доменно-ключевая НФ;
– НФ Бойса-Кодда.
Каждый из уровней нормализации ограничивает типы допустимых функциональных зависимостей отношения.
детерминанта
зависимая часть
Атомарность (неделимость) поля означает, что содержащиеся в нем значения не должны делиться на более мелкие.
Дублирование информации
Отсутствие атомарности
Выделение для пунктов назначения отдельной таблицы устранит дублирование информации.
Приведение к первой нормальной форме провоцирует избыточность
Целостность данных – согласованность данных в базе данных.
Аномалия удаления – непреднамеренная потеря данных, вызванная удалением других данных.
Аномалия обновления – противоречивость данных, вызванная их избыточностью и частичным обновлением.
Аномалия ввода – невозможность ввести данные в таблицу, вызванная отсутствием других данных.
Теперь предположим, что Мирненко в течение трех месяцев был на больничном и все здания, на которых он был назначен работать, уже закончены. Если принимается решение удалить все строки о законченных зданиях из таблицы, то информация о Мирненко, его специальности будет потеряна. Это называется аномалией удаления.
Обратный случай: мы могли нанять нового работника по фамилии Алдошин, которого еще не успели назначить ни на какое здание. Если мы не допускаем пустых значений, то не можем ввести информацию о Алдошине в базу данных. Это называется аномалией ввода.
Из таблицы СОТРУДНИКИ_ОТДЕЛЫ_ПРОЕКТЫ
видно, что данные отношения хранятся
в ней с большой избыточностью.
Во многих строках повторяются фамилии сотрудников, номера телефонов, наименования проектов. Кроме того, в данном отношении хранятся вместе независимые друг от друга данные - и данные о сотрудниках, и об отделах, и о проектах, и о работах по проектам.
Таблица 2. Отношение СОТРУДНИКИ_ОТДЕЛЫ
Таблица 3. Отношение ПРОЕКТЫ
Функциональные зависимости:
Н_ПРО → ПРОЕКТ
Таблица 4. Отношения ЗАДАНИЯ
Функциональные зависимости:
(Н_СОТР, Н_ПРО) → Н_ЗАДАН
Функциональные зависимости:
Зависимость атрибутов, характеризующих сотрудника от табельного номера сотрудника:
Н_СОТР → ФАМ
Н_СОТР → Н_ОТД
Н_СОТР → ТЕЛ
Зависимость номера телефона от номера отдела:
Н_ОТД → ТЕЛ
Таблица 2. Отношение СОТРУДНИКИ_ОТДЕЛЫ
Неключевой атрибут — это атрибут, который не входит в состав первичного ключа рассматриваемой переменной-отношения.
Два или более атрибутов называются взаимно независимыми, если ни один из них функционально не зависит от какой-либо комбинации остальных атрибутов. Подобная независимость подразумевает, что каждый такой атрибут может обновляться независимо от значений остальных атрибутов.
Неключевой атрибут — это атрибут, который не входит в состав первичного ключа рассматриваемой переменной-отношения.
Два или более атрибутов называются взаимно независимыми, если ни один из них функционально не зависит от какой-либо комбинации остальных атрибутов. Подобная независимость подразумевает, что каждый такой атрибут может обновляться независимо от значений остальных атрибутов.
Для приведения ко второй нормальной форме мы разбили эту таблицу:
Однако могли поступить и проще – убрать составной первичный ключ:
Вот эта модель данных также соответствует второй нормальной форме.
Но таким образом вы всего лишь отодвинете свои страдания по нормализации до 3 НФ, вам все равно придется разбить эту таблицу на две.
Адекватность базы данных предметной области
База данных должна адекватно отражать предметную область. Это означает, что должны выполняться следующие условия:
- состояние базы данных в каждый момент времени должно соответствовать состоянию предметной области;
- изменение состояния предметной области должно приводить к соответствующему изменению состояния базы данных;
- ограничения предметной области, отраженные в модели предметной области, должны некоторым образом отражаться и учитываться базе данных.
Хранимые процедуры - это процедуры и функции, хранящиеся непосредственно в БД в откомпилированном виде и которые могут запускаться пользователями или приложениями, работающими с БД. Хранимые процедуры обычно пишутся либо на специальном процедурном расширении языка SQL (например, PL/SQL для ORACLE или Transact-SQL для MS SQL Server), или на некотором универсальном языке программирования, например, C++, с включением в код операторов SQL в соответствии со специальными правилами такого включения.
Основное назначение хранимых процедур - реализация бизнес-процессов предметной области.
Триггеры - это хранимые процедуры, связанные с некоторыми событиями, происходящими во время работы БД. В качестве таких событий выступают операции вставки, обновления и удаления строк таблиц. Если в базе данных определен некоторый триггер, то он запускается автоматически всегда при возникновении события, с которым этот триггер связан. Очень важным является то, что пользователь не может обойти триггер. Триггер срабатывает независимо от того, кто из пользователей и каким способом инициировал событие, вызвавшее запуск триггера. Таким образом, основное назначение триггеров - автоматическая поддержка целостности базы данных. Триггеры могут быть как достаточно простыми, например, поддерживающими ссылочную целостность, так и довольно сложными, реализующими какие-либо сложные ограничения предметной области или сложные действия, которые должны произойти при наступлении некоторых событий.
Например, с операцией вставки нового товара в накладную может быть связан триггер, который выполняет следующие действия - проверяет, есть ли необходимое количество товара, при наличии товара добавляет его в накладную и уменьшает данные о наличии товара на складе, при отсутствии товара формирует заказ на поставку недостающего товара и тут же посылает заказ по электронной почте поставщику.
Скорость выполнения операций вставки, обновления и удаления уменьшается при увеличении количества индексов у таблицы.
Чем больше атрибутов имеют отношения, разработанные в ходе логического моделирования, тем медленнее будут выполняться операции обновления данных, за счет затраты времени на перестройку большего количества индексов.
Скорость операций выборки данных
Увеличение количества взаимосвязанных отношений (для которых необходима операция соединения таблиц ) приводит к замедлению выполнения операций выборки данных.
Индексы - это специальные структуры в базах данных, которые позволяют ускорить поиск и сортировку по определенному полю или набору полей в таблице.
Например мы хотим найти запись, удовлетворяющую условию:
SELECT * FROM Customers
WHERE CustomerID = ‘ROMEY’
SQL Server прочитает все записи начиная с первой и заканчивая последней и выберет те, которые будут удовлетворять указанному условию.
SQL Server не знает что в таблице существует только одна запись, удовлетворяющая условию, пока в таблице не существует индекса.
Информация извлекается из реляционной базы данных при помощи оператора SQL - SELECT. Одной из наиболее дорогостоящих операций при выполнении оператора SELECT является операция соединение таблиц. Таким образом, чем больше взаимосвязанных отношений было создано в ходе логического моделирования, тем больше вероятность того, что при выполнении запросов эти отношения будут соединяться, и, следовательно, тем медленнее будут выполняться запросы. Таким образом, увеличение количества отношений приводит к замедлению выполнения операций выборки данных, особенно, если запросы заранее неизвестны.
Индексы отличаются от первичных ключей тем, что не требуют непременной уникальности значений входящих в их состав полей.
Сильно нормализованные модели данных хорошо подходят для так называемых OLTP-приложения.
Типичными примерами OLTP-приложений являются:
системы складского учета,
системы заказов билетов,
банковские системы, выполняющие операции по переводу денег…
Основная функция подобных систем заключается в выполнении большого количества коротких транзакций.
Другим типом приложений являются так называемые OLAP-приложения. Это обобщенный термин, характеризующий принципы построения:
систем поддержки принятия решений (Decision Support System - DSS),
хранилищ данных (Data Warehouse),
систем интеллектуального анализа данных (Data Mining).
Такие системы предназначены для нахождения зависимостей между данными (например, можно попытаться определить, как связан объем продаж товаров с характеристиками потенциальных покупателей), для проведения анализа "что если…".
Данные в таких системах целесообразно хранить в виде слабо нормализованных отношений, содержащих заранее вычисленные основные итоговые данные. Большая избыточность и связанные с ней проблемы тут не страшны, т.к. обновление происходит только в момент загрузки новой порции данных.
OLAP (On-Line Analitical Processing - оперативная аналитическая обработка данных) – это способ организации БД, заключающаяся в подготовке суммарной (агрегированной) информации на основе больших массивов данных, структурированных по многомерному принципу.
Потенциальный ключ — в реляционной модели данных — подмножество атрибутов отношения, удовлетворяющее требованиям уникальности и минимальности (несократимости / атомарности).
Уникальность означает, что не существует двух кортежей данного отношения, в которых значения этого подмножества атрибутов совпадают (равны).
Существует функциональная зависимость Тариф → Номер корта, в которой левая часть (детерминант) не является потенциальным ключом отношения, то есть отношение не находится в нормальной форме Бойса — Кодда.
Недостатком данной структуры является то, что, например, по ошибке можно приписать тариф «Бережливый» к бронированию 2 корта, хотя он может относиться только к 1корту.
Отношения с нетривиальными многозначными зависимостями возникают, как правило, в результате естественного соединения двух отношений по общему полю, которое не является ключевым ни в одном из отношений. Фактически это приводит к попытке хранить в одном отношении информацию о двух независимых сущностях.
В качестве примера можно привести ситуацию, когда сотрудник может иметь много работ и много детей. Хранение информации о работах и детях в одном отношении приводит к возникновению нетривиальной многозначной зависимости Работник-Работа-Дети.
В отношении "Абитуриенты-Факультеты-Предметы" имеется именно нетривиальная многозначная зависимость Факультет→→ Абитуриент | Предмет.
Аномалия вставки. При попытке добавить в отношение "Абитуриенты-Факультеты-Предметы" новый кортеж, например (Красношапка, Самолетостроительный, Математика), мы обязаны добавить также и кортеж (Красношапка, Самолетостроительный, Информатика), т.к. все абитуриенты самолетостроительного факультета обязаны иметь один и тот же список сдаваемых предметов. Соответственно, при попытке вставить в модифицированное отношении кортеж (3, 1, 1), мы обязаны вставить в него также и кортеж (3, 1, 2).
Аномалия удаления. При попытке удалить кортеж (Руденкова, СУЛА, Математика), мы обязаны удалить также и кортеж (Руденкова, СУЛА, Физика) по той же самой причине.
Таким образом, вставка и удаление кортежей не может быть выполнена независимо от других кортежей отношения.
Кроме того, если мы удалим эти кортежи, то будет потеряна информация о предметах, которые должны сдаваться на факультете СУЛА.
Товары продавцов
Фирмы продавцов
Товары фирм
Шестая нормальная форма
Модель находится в шестой нормальной форме тогда и только тогда, когда она удовлетворяет всем нетривиальным зависимостям соединения.
Эта модель является финальной и не может быть подвергнута дальнейшей декомпозиции без потерь.
Практически не применяется. Для хронологических баз данных максимально возможная декомпозиция позволяет бороться с избыточностью и упрощает поддержание целостности базы данных.
Альтернативное определение: переменная отношения находится в ДКНФ тогда и только тогда, когда каждое наложенное на неё ограничение является логическим следствием ограничений доменов и ограничений ключей, наложенных на данную переменную отношения.
Это достигается добавлением дополнительных ограничений на значения полей записи. Поддержание целостности данных возлагается на механизмы конкретной СУБД. Например дефолтовые значения полей, ограничения диапазон данных, триггеры, срабатывающие при создании, модификации или удалении записей и так далее. Словом всё что угодно, что способствует сохранению целостности данных. Её предложил Рональд Фагин в 1981 году.
Доменно-ключевая нормальная форма (ДКНФ) - это такая форма, когда любая операция добавления или удаления записи не может привести к нарушению целостности данных.
Ограничение домена – ограничение, предписывающее использовать для определённого атрибута значения только из некоторого заданного домена. Ограничение по своей сути является заданием перечня (или логического эквивалента перечня) допустимых значений типа и объявлением о том, что указанный атрибут имеет данный тип.
Ограничение ключа – ограничение, утверждающее, что некоторый атрибут или комбинация атрибутов является потенциальным ключом.
Любая переменная отношения, находящаяся в ДКНФ, обязательно находится в 5НФ. Однако не любую переменную отношения можно привести к ДКНФ.
Null-значения
Основное назначение баз данных состоит в том, чтобы хранить и предоставлять информацию о реальном мире. Для представления этой информации в базе данных используются привычные для программистов типы данных - строковые, численные, логические и т.п. Однако в реальном мире часто встречается ситуация, когда данные неизвестны или не полны. Например, место жительства или дата рождения человека могут быть неизвестны (база данных разыскиваемых преступников). Если вместо неизвестного адреса уместно было бы вводить пустую строку, то что вводить вместо неизвестной даты? Ответ - пустую дату - не вполне удовлетворителен, т.к. простейший запрос "выдать список людей в порядке возрастания дат рождения" даст заведомо неправильных ответ.
Null - это некий маркер, показывающий, что значение неизвестно, который используется для того чтобы обойти проблему неполных или неизвестных данных.
Правило целостности сущностей - атрибуты, входящие
в состав некоторого потенциального ключа не могут принимать null-значений.
Правило целостности внешних ключей - внешние ключи не должны быть несогласованными, т.е. для каждого значения внешнего ключа должно существовать соответствующее значение первичного ключа в родительском отношении.
Рассмотрим пример с поставщиками и поставками алкоголя. Предположим, что нам требуется хранить информацию о наименовании поставщиков, наименовании и количестве поставляемого ими алкоголя, причем каждый поставщик может поставлять несколько видов алкоголя и каждая разновидность алкоголя может поставляться несколькими поставщиками.
Приведенный способ хранения данных обладает рядом недостатков.
Что произойдет, если изменилось наименование поставщика? Т.к. наименование поставщика повторяется во многих кортежах отношения, то это наименование нужно одновременно изменить во всех кортежах, где оно встречается, иначе данные станут противоречивыми. То же самое с наименованиями деталей. Значит, данные хранятся в нашем отношении с большой избыточностью.
Далее, как отразить факт, что некоторый поставщик, например Холодняк, временно прекратил поставки алкоголя? Если мы удалим все кортежи, в которых хранится информация о поставках этого поставщика, то мы потеряем данные о самом Петрове как потенциальном поставщике. Выйти из этого положения, оставив в отношении кортеж типа (2, Холодняк, NULL, NULL, NULL) мы не можем, т.к. атрибут "Номер алкоголя" входит в состав потенциального ключа и не может содержать null-значений. То же самое произойдет, если некоторый алкоголь временно не поставляется никаким поставщиком. Получается, что мы не можем хранить информацию о том, что есть некий поставщик, если он не поставляет хотя бы один вид алкоголя, и не можем хранить информацию о том, что есть некоторое бухло, если оно никем не поставляется. Это проблема плохой нормализации.
Отношение "Поставщики и поставляемые детали"
Потенциальным ключом этого отношения может выступать пара атрибутов {"Номер поставщика", "Номер алкоголя"} - в таблице они выделены подчеркиванием.
Отношение "Поставщики и поставляемые детали"
Взаимосвязь между "Поставщиками" и " Алкоголем" можно переформулировать так: "Несколько видов Алкоголя может поставляться несколькими Поставщиками". Это пример взаимосвязи типа "много-ко-многим".
В реляционных базах данных основными являются взаимосвязи типа "один-ко-многим". Взаимосвязи типа "много-ко-многим" реализуются использованием нескольких взаимосвязей типа "один-ко-многим".
Отношение, входящее в связь со стороны "один" (например, "Поставщики"), называют родительским отношением. Отношение, входящее в связь со стороны "много" (например, "Поставки"), называется дочернем отношением.
Эти фразы отражают различные типы взаимосвязей. Чтобы более точно отразить предметную область, можно иначе переформулировать фразы: "Один Поставщик может выполнять несколько Поставок", "Один вид Алкоголя может поставляться несколькими Поставками". Это пример взаимосвязи типа "один-ко-многим".
Отношение «Поставщик»
Отношение «Алкоголь»
Отношение «Поставка»
Найдите внешние ключи?
Домен в реляционной модели данных — тип данных, то есть допустимое множество значений.
Примерами могут являться типы «целое» (множество всех целых чисел), «строка» (множество всех строк), «номер детали» (множество всех номеров деталей) и т. д. Таким образом, когда мы говорим, что некоторое отношение имеет атрибут типа «целое», мы имеем в виду, что все значения этого атрибута принадлежат множеству «целое» и никакому другому.
Замечание 5. Хотя каждое значение внешнего ключа обязано совпадать со значениями потенциального ключа в некотором кортеже родительского отношения, то обратное, вообще говоря, неверно. Например, могут существовать поставщики, не поставляющие никаких деталей.
Замечание 6. Для внешнего ключа не требуется, чтобы он был компонентом некоторого потенциального ключа (как получилось в примере с поставщиками и деталями).
Замечание 7. Null-значения для атрибутов внешнего ключа допустимы только в том случае, когда атрибуты внешнего ключа не входят в состав никакого потенциального ключа.
Для родительского отношения
Вставка кортежа в родительском отношении. При вставке кортежа в родительское отношение возникает новое значение потенциального ключа. Т.к. допустимо существование кортежей в родительском отношении, на которые нет ссылок из дочернего отношения, то вставка кортежей в родительское отношение не нарушает ссылочной целостности.
Обновление кортежа в родительском отношении. При обновлении кортежа в родительском отношении может измениться значение потенциального ключа. Если есть кортежи в дочернем отношении, ссылающиеся на обновляемый кортеж, то значения их внешних ключей станут некорректными. Обновление кортежа в родительском отношении может привести к нарушению ссылочной целостности, если это обновление затрагивает значение потенциального ключа.
Удаление кортежа в родительском отношении. При удалении кортежа в родительском отношении удаляется значение потенциального ключа. Если есть кортежи в дочернем отношении, ссылающиеся на удаляемый кортеж, то значения их внешних ключей станут некорректными. Удаление кортежей в родительском отношении может привести к нарушению ссылочной целостности.
Для дочернего отношения
Вставка кортежа в дочернее отношение. Нельзя вставить кортеж в дочернее отношение, если вставляемое значение внешнего ключа некорректно. Вставка кортежа в дочернее отношение привести к нарушению ссылочной целостности.
Обновление кортежа в дочернем отношении. При обновлении кортежа в дочернем отношении можно попытаться некорректно изменить значение внешнего ключа. Обновление кортежа в дочернем отношении может привести к нарушению ссылочной целостности.
Удаление кортежа в дочернем отношении. При удалении кортежа в дочернем отношении ссылочная целостность не нарушается.
Таким образом, ссылочная целостность в принципе может быть нарушена при выполнении одной из четырех операций:
Обновление кортежа в родительском отношении.
Удаление кортежа в родительском отношении.
Вставка кортежа в дочернее отношение.
Обновление кортежа в дочернем отношении.
RESTRICT (ОГРАНИЧИТЬ) – не разрешать выполнение операции, приводящей к нарушению ссылочной целостности. Это самая простая стратегия, требующая только проверки, имеются ли кортежи в дочернем отношении, связанные с некоторым кортежем в родительском отношении.
CASCADE (КАСКАДИРОВАТЬ) – разрешить выполнение требуемой операции, но внести при этом необходимые поправки в других отношениях так, чтобы не допустить нарушения ссылочной целостности и сохранить все имеющиеся связи. Изменение начинается в родительском отношении и каскадно выполняется в дочернем отношении. В реализации этой стратегии имеется одна тонкость, заключающаяся в том, что дочернее отношение само может быть родительским для некоторого третьего отношения. При этом может дополнительно потребоваться выполнение какой-либо стратегии и для этой связи и т.д. Если при этом какая-либо из каскадных операций (любого уровня) не может быть выполнена, то необходимо отказаться от первоначальной операции и вернуть базу данных в исходное состояние. Это самая сложная стратегия, но она хороша тем, что при этом не нарушается связь между кортежами родительского и дочернего отношений.
0. Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности.
1. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах.
12 правил Кодда
Различают следующие виды СУБД:
- файл-серверные;
- клиент-серверные;
- встраиваемые.
Другими словами, СУБД – это программа, либо комплекс программ, предназначенных для полнофункциональной работы с данными. Как правило, включает в себя инструменты для создания и изменения структуры хранения наборов данных, а также средства доступа к хранимым данным, с возможностью их чтения, добавления, изменения и удаления. При этом, у большинства СУБД имеется собственный встроенный язык (возможно не один) для работы с данными.
Сама база данных (БД) обычно находится просто в файлах закрытого, либо открытого формата.
В соответствии с концептуальным требованием независимости базы данных и приложений, СУБД призвана играть роль посредника между пользователем (точнее его непосредственным запросом или приложением, в котором сформулирован запрос) и базой данных.
Классификация по модели данных
– иерархические;
– сетевые;
– реляционные;
– объектно-ориентированные
Классификация по способу доступа к БД
- файл-серверные;
- клиент-серверные;
- встраиваемые.
Иерархические СУБД
IMS (англ. IBM Information Management System, система управления информацией IBM) — система управления иерархическими базами данных с транзакционными возможностями, выпускается компанией IBM с 1968 года.
Также к ним относятся: Firebird, Interbase, H2, IBM DB2, Informix, Sybase Adaptive Server Enterprise, Cache, ЛИНТЕР…
Также к ним относятся: OpenEdge, BerkeleyDB, Microsoft SQL Server Compact, ЛИНТЕР…
Как установить MySQL Workbench на Windows?
Во-вторых, программа имеет встроенный редактор SQL-кода, с помощью которого можно быстро внести любые правки в SQL-запросы. При этом возможно строить запросы любой сложности, получать различные выборки из таблиц, связывать их, создавать новые таблицы и редактировать существующие, работать с ключами, полями, связями. Одним словом — полноценный SQL-редактор.
Первое, что стоит отметить — Workbench дает возможность визуально проектировать вашу базу данных, т.е. составлять схему БД. Визуальное представление вашей базы данных всегда дает куда большую информацию, чем сухой список таблиц. В таком варианте вы сразу видите, каким образом связаны между собой таблицы, можете группировать таблицы по каким-либо параметрами и отражать это на схеме. При этом визуальное проектирование удобно не только для того, чтобы кому-то рассказывать о проектируемой БД, но и для личного использования.
http://dev.mysql.com/downloads/workbench/
Создание новой модели данных
Для создания новой модели выбери в меню File->New Model или нажмите на плюсик внизу в списке всех моделей. Появится окно для построения таблиц, представлений, схем, ролей, скриптов и т.д. Несмотря на всю эту автоматизацию, рекомендуется сначала примерно набросать список таблиц на бумаге, опираясь на предметную область, на поставленную задачу и специфику проекта. После этого создать таблицы в Workbench, а затем уже составлять диаграмму.
.
Для создания новой таблицы на вкладке физической схемы (Physical Schemas) выберите «Add Table» и заполняйте поля
Примечание: При выборе типа данных для поля изначально не указывается нигде поля для задания размерности. Но это не значит, что этого сделать нельзя. Советую указывать длину, не стоит отмечать тип поля просто INT, например. Укажите в скобках его размер (к примеру, INT (11)). Т.е. выбираете типа данных и в скобках уже сами дописываете его размер.
Каждый столбец имеет:
1 имя (не используйте русские буквы в имени!),
2 тип данных. Самые распространенные типы данных:
INT – целое число;
VARCHAR (размер) – символьные данные переменной длины, в скобках указывается максимальный размер;
DECIMAL (размер, десятичные_знаки) – десятичное число;
DATE – дата:
DATETIME – дата и время.
3 PK (primary key) – первичный ключ;
4 NN (not null) – ячейка не допускает пустые значения;
5 UN (unique) – значение должно быть уникальным в пределах столбца;
6 AI (auto incremental) – это свойство полезно для простого первичного ключа, оно означает, что первичный ключ будет заполняться автоматически натуральными числами 1, 2, 3, и т.п.;
7 DEFAULT – значение по умолчанию, т.е., значение, которое при добавлении новой строки в таблицу автоматически вставляется в ячейку сервером, если пользователь оставил ячейку пустой.
EER диаграмма (EER = Enhanced Entity Relationship)
Создание SQL CREATE скрипта
Последним этапом моделирования данных, является трансформация разработанной модели в базу данных MySQL. Для этого необходимо создать SQL скрипт. Заходим в меню. Выбираем пункт меню File->Export-> Forward Engineer SQL CREATE Script.
В появившемся окне в поле Output file при помощи кнопки Browse выбираем путь хранения скрипта и задаем его имя. Нажимаем кнопку Next.
В следующем окне нажимаем кнопку Finish .
После этого идете дальше, будет проверено подключение и, если все ок, то сможете перейти к выбору модели для синхронизации. Здесь выбираете вашу модель, а внизу выбираете базу данных на вашем сервере. Снова идете дальше, где опять будет проверка все ваших данных.
После этого вы уже попадете на список таблиц в вашей моделе в программе и в БД на сервере. Важно, что данный способ синхронизации полностью синхронизирует данные, т.е. не только загружает на сервер новые таблицы, но и, наоборот, может загрузить таблицы с сервера в программу. Для этого достаточно выбрать таблицы в базе и нажать кнопку «Update Model», чтобы они загрузились в модель при синхронизации. Также какие-то таблицы можно запретить к загрузке. Для наглядности я взял реальную базу данных, при синхронизации четко видно куда грузятся какие таблицы, а какие запрещены для загрузки.
Отличия языка SQL и реляционной теории
Язык SQL оперирует терминами, несколько отличающимися от терминов реляционной теории, например,
вместо "отношений" используются "таблицы",
вместо "кортежей" - "строки",
вместо "атрибутов" - "колонки" или "столбцы".
Стандарт языка SQL, хотя и основан на реляционной теории, но во многих местах отходит он нее.
Компоненты языка SQL
Основу языка SQL составляют операторы, условно разбитые не несколько групп по выполняемым функциям:
DDL (Data Definition Language) - операторы определения объектов базы данных.
DML (Data Manipulation Language) - операторы манипулирования данными.
DCL (Data Control Language) – операторы для работы с правами доступа.
TCL (Transaction Control Language) – операторы управления транзакциями.
История
В начале 1970-х годов в одной из исследовательских лабораторий компании IBM была разработана экспериментальная реляционная СУБД IBM System R, для которой затем был создан специальный язык SEQUEL (Structured English QUEry Language). Позже язык SEQUEL был переименован в SQL.
Первыми СУБД, поддерживающими новый язык, стали в 1979 году Oracle V2 от компании Relational Software Inc. (впоследствии ставшей компанией Oracle) и System/38 от IBM, основанная на System/R.
В 1986 году первый стандарт языка SQL был принят ANSI (American National Standards Institute).
Год спустя Международная организация по стандартизации (International Organization
for Standardization, ISO) опубликовала стандарт ISO 9075-1987 «Database Language SQL»
(Язык баз данных SQL).
Последняя на данный момент редакция: ISO/IEC 9075:2011 «Информационные технологии. Языки базы данных. Язык структурированных запросов (SQL)», либо SQL:2011.
независимость от конкретных СУБД,
переносимость с одной аппаратной среды в другую,
наличие стандартов,
реляционная основа.
Достоинства SQL
DML (Data Manipulation Language) - операторы манипулирования данными
SELECT - отобрать строки из таблиц
INSERT - добавить строки в таблицу
UPDATE - изменить строки в таблице
DELETE - удалить строки в таблице
DCL (Data Control Language) – операторы для работы с правами доступа
CREATE ASSERTION - создать ограничение DROP ASSERTION - удалить ограничение
GRANT - предоставить привилегии пользователю или приложению на манипулирование объектами
REVOKE - отменить привилегии пользователя или приложения
TCL (Transaction Control Language) – операторы управления транзакциями
COMMIT - зафиксировать внесенные изменения
ROLLBACK - откатить внесенные изменения
SHOW DATABASES; - показывает, какие базы существуют в настоящее время на сервере.
SHOW TABLES; - показывает, какие таблицы существуют в текущей БД.
USE test – использовать БД с именем test (это специфичная команда - ее необходимо писать в одну строку).
GRANT ALL ON menagerie.* TO your_mysql_name; – предоставить неограниченные права пользователю с именем your_mysql_name для работы с БД menagerie.
DESCRIBE pet; – выводит всю информацию о структуре таблицы pet.
Загрузка данных с помощью текстового файла
Предположим, ваши записи соответствуют приведенным в этой таблице (обратите внимание: MySQL принимает даты в формате ГГГГ-ММ-ДД; возможно, к такой записи вы не привыкли).
Так как вы начинаете работу с пустой таблицей, заполнить ее будет проще всего, если создать текстовый файл, содержащий по строке на каждое из животных, а затем загрузить его содержимое в таблицу одной командой.
Создайте текстовый файл с именем pet.txt, содержащий по одной записи в каждой строке (значения столбцов должны быть разделены символами табуляции и даны в том порядке, который был определен командой CREATE TABLE). Незаполненным полям (например, неизвестный пол или даты смерти живых на сегодняшний день животных), можно присвоить значение NULL. В текстовом файле это значение представляется символами \N. Например, запись для птицы Whistler должна выглядеть примерно так (между значениями должны располагаться одиночные символы табуляции):
Маркер конца строки и символ, разделяющий значения столбцов, можно специально задать в команде LOAD DATA, но по умолчанию используются символы табуляции и перевода строки. Воспринимая их, команда сможет корректно прочитать файл pet.txt.
Загрузить файл pet.txt в таблицу можно с помощью следующей команды:
mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
CREATE DATABASE SQLStepByStep
ON
PRIMARY (NAME=SQLStepData,
FILENAME='c:\mssql7\data\sqlstep_data.mdf',
SIZE=5,
MAXSIZE=10,
FILEGROWTH=10% )
LOG ON
( NAME=SQLStepLog,
FILENAME='c:\mssql7\data\sqlstep_log.ldf',
SIZE=1, MAXSIZE=5,
FILEGROWTH=1 )
CREATE TABLE table ( column1 type1 [(size1)][CONSTRAINT _ column-constraint1] [, column2 type2 [(size2)][CONSTRAINT _ column-constraint2] [, ...]] [CONSTRAINT table-constraint1 _ [,table-constraint2 [, ...]]]);
В этом операторе следует указать имя поля, тип данных для него (тип данных должен поддерживаться данной СУБД), длину (для некоторых типов полей) и, если нужно, серверные ограничения (с применением ключевого слова CONSTRAINT).
Например, следующий запрос создает таблицу с именем Simple с четырьмя колонками — LastName, FirstName, EMail и HomePage:
CREATE TABLE Simple (FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL, EMail varchar(50), HomePage varchar(255) )
Мы можем расширить эту таблицу добавлением поля PersonID, которое будет использовано как первичный ключ:
CREATE TABLE Simple ( PersonID Integer NOT NULL PRIMARY KEY, FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL, EMail varchar(50), HomePage varchar(255) )
и указать, что комбинация полей LastName и FirstName должна быть уникальна:
CREATE TABLE Simple ( PersonID Integer NOT NULL PRIMARY KEY, FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL, EMail varchar(50), HomePage varchar(255), CONSTRAINT SimpleConstraint UNIQUE (FirstName, LastName) )
MySQL:
id INTEGER PRIMARY KEY AUTO_INCREMENT
MS SQL server:
id INT identity(1,1) PRIMARY KEY
Оператор DELETE
Для удаления строк из таблиц следует использовать оператор DELETE, синтаксис которого имеет вид:
DELETE FROM table [WHERE criteria]
Предложение WHERE не является обязательным, но если вы забудете его включить, из таблицы будут удалены все записи. Например, для удаления из списка всех продуктов, которые больше не поставляются, можно выполнить следующий запрос:
DELETE FROM Products WHERE Discontinued = 1
Оператор INSERT
Для добавления записей в таблицы следует использовать оператор INSERT, синтаксис которого имеет вид:
INSERT [INTO] table ( [column_list] { VALUES ( { DEFAULT | NULL | expression } } [, …] )
Например, для добавления нового клиента в таблицу Customers можно использовать следующий запрос:
INSERT INTO Customers (CustomerID, CompanyName) VALUES (‘XYZFO’, ‘XYZ Deli’)
Обратите внимание!
Здесь даны неверные примеры (без FROM).
Предложение FROM
Для указания имен таблиц, из которых выбираются записи, применяется ключевое слово FROM, например, этот запрос возвратит все поля из таблицы Customers:
SELECT * FROM Customers
Если в результирующем наборе данных нужны только поля CompanyName и ContactName, мы можем ввести следующее предложение SELECT:
SELECT CompanyName, ContactName FROM Customers
Пример запроса к более чем одной таблице приведен ниже:
SELECT Customers.CompanyName, Shippers.CompanyName FROM Customers, Shippers
Операторы сравнения
< Меньше
<= Меньше или равно
<> Не равно
= Равно
> Больше
>= Больше или равно
Операторы специального сравнения (применяются вместе с WHERE)
ALL Применяется совместно с операторами сравнения при сравнении со списком значений
ANY Применяется совместно с операторами сравнения при сравнении со списком значений
BETWEEN Применяется при проверке нахождения значения внутри заданного интервала (включая его границы)
IN Применяется для проверки наличия значения в списке
LIKE Применяется при проверке соответствия значения заданной маске
Связывание таблиц
Как мы уже убедились, можно создавать запросы, позволяющие извлечь данные из нескольких таблиц. Обратите внимание на то, что без связывания таблиц в результате запроса получится набор данных, содержащий все возможные комбинации строк каждой из исходных таблиц (известное также как декартово произведение):
SELECT ProductName, CategoryName FROM Products, Categories
в то время как запрос, показанный ниже, приводит к отображению списка продуктов с указанием, к какой категории принадлежит данный продукт:
SELECT ProductName, CategoryName FROM Products, Categories WHERE Products.CategoryID = Categories.CategoryID
Применение WHERE + AND, OR, NOT
SELECT CompanyName, ContactName FROM Customers WHERE CompanyName LIKE ‘S%’ AND Country = ‘USA’
Результатом выполнения этого запроса будет список заказчиков, находящихся в США, название которых начинается с буквы S.
SELECT CompanyName, ContactName FROM Customers WHERE Country NOT IN (‘USA’, ‘UK’)
В результате выполнения этого запроса мы получим список заказчиков из всех стран, кроме США и Великобритании.
CROSS JOIN эквивалентен «запятой»:
SELECT ProductName, CategoryName FROM Products, Categories
INNER JOIN эквивалентен просто JOIN
LEFT OUTER JOIN эквивалентен LEFT JOIN
RIGHT OUTER JOIN эквивалентен RIGHT JOIN
FULL OUTER JOIN эквивалентен FULL JOIN
Псевдокод запроса объединяющего 3 таблицы
ВЫБРАТЬ (поля) поле_1, поле_2, поле_3 ИЗ (таблицы) таблица_1 СОЕДИНИВ (с таблицей) таблица_2 ПО (условию) (поле_внешнего_ключа_таблицы_1 = поле_первичного_ключа_таблицы_2) СОЕДИНИВ (с таблицей) таблицей_3 ПО (условию) (поле_внешнего_ключа_таблицы_2 = поле_первичного_ключа_таблицы_3);
Естественные соединения (NATURAL JOIN)
Естественным соединением называется соединение между двумя таблицами, в котором СУБД соединяет таблицы по одинаково называющемуся столбцу (столбцам) обеих таблиц (естественным образом!).
Естественное соединение выполняется в том случае, если указано ключевое слово NATURAL.
Аналогично
Единственным совпадающим столбцом
для таблиц emp и dept является столбец depnto.
Нетрудно заменить, что естественные соединения позволяют в значительной степени упростить запросы с соединением за счет устранения псевдонимов таблиц и сравнений для соединения.
SELECT ename, deptno, dname
FROM emp NATURAL JOIN dept;
SELECT ename, emp.deptno, dname
FROM emp JOIN dept
ON emp.deptno = dept.deptno;
Вычисление дат
В MySQL предусмотрено несколько функций для получения частей дат - YEAR(), MONTH(), и DAYOFMONTH().
Определить возраст любого из животных в базе (слайд № 49) можно, если вычислить разницу между текущим годом и годом его рождения, а из результата вычесть единицу, если текущий день находится к началу календаря ближе, нежели день рождения животного. Приведенный ниже запрос выводит дату рождения каждого животного, его возраст и текущую дату.
SELECT name, birth, CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(birth)) - (RIGHT(CURRENT_DATE,5)
В этом примере функция YEAR() выделяет из даты год, а RIGHT() - пять крайних справа символов, представляющих календарный день (MM-DD). Часть выражения, сравнивающая даты, выдает 1 или 0, что позволяет уменьшить результат на единицу, если текущий день (CURRENT_DATE) находится к началу календаря ближе, нежели день рождения животного. Все выражение смотрится несколько неуклюже, поэтому вместо него в заголовке соответствующего столбца результатов выводится псевдоним (age - "возраст").
Наиболее часто используемые агрегатные функции
Ключевые слова ALL и DISTINCT
До этого момента мы рассматривали, как извлечь все или заданные колонки из одной или нескольких таблиц. Для управления выводом дублирующихся строк результирующего набора данных можно использовать ключевые слова ALL или DISTINCT в предложении SELECT. Ключевое слово DISTINCT указывает, что строки результирующего набора данных должны быть уникальны, тогда как ключевое слово ALL указывает, что возвращать следует все строки. Например, для извлечения названий стран, в которых имеются заказчики, можно использовать следующий запрос:
SELECT DISTINCT Country FROM Customers
Отметим, что ключевое слово ALL используется по определению. Если в запросе требуется вывести более одной колонки и при этом использовано слово DISTINCT, то результирующий набор данных будет содержать различные строки, но некоторые значения одного и того же поля в разных строках могут совпадать.
Ключевое слово TOP
Ключевое слово TOP может быть использовано для возврата первых n строк или первых n процентов таблицы. Например, запрос:
SELECT TOP 10 * FROM PRODUCTS ORDER BY ProductName
возвращает первые 10 продуктов из таблицы, тогда как запрос:
SELECT TOP 25 PERCENT * FROM PRODUCTS ORDER BY ProductName
вернет первую четверть записей таблицы.
string LCASE( str string ) string
string LOWER( str string ) // дополнительно в MySQL
Возвращает строку str, заменив в ней все заглавные буквы на прописные.
string UCASE( str string )
string UPPER( str string ) // дополнительно в MySQL
Возвращает строку str, заменив в ней все прописные буквы на заглавные. Поддерживает многобайтовые символы.(По умолчанию ISO-8859-1 Latin1).
Примеры:
mysql> select LCASE('QUADRATICALLY');
-> 'quadratically‘
mysql> select LOWER('QUADRATICALLY');
-> 'quadratically‘
mysql> select UCASE('Hej');
-> 'HEJ‘
mysql> select UPPER('Hej');
-> 'HEJ'
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть