Лекция Базы данных. СУБД MySQL Глоссарий База данных (БД) - совместно используемый набор логически связанных, структурированных данных (и описание этих данных), предназначенный для удовлетворения информационных потребностей организации. СУБД – Система управления базами данных. Реляционные БД – база данных, основанная на реляционной модели данных. Слово «реляционный» происходит от англ. relation («отношение», «зависимость», «связь»). Сущность (entity) - Сущности могут моделировать конкретные понятия (клиенты, товары, звонки) и абстрактные (агент отвечает за клиента, студент записан на курс). Кортеж (запись) - Попросту говоря, кортеж - это набор именованных значений заданного типа или 1 запись, строка в таблице БД. Ключ - или потенциальный ключ – это минимальный набор атрибутов, по значениям которых можно однозначно выбрать требуемый экземпляр сущности. Проектирование баз данных. Подход. Принципы проектирования. При проектировании базы данных решаются две основных проблемы: 1. Каким образом отобразить объекты предметной области в абстрактные объекты модели данных, чтобы это отображение не противоречило семантике предметной области и было по возможности лучшим (эффективным, удобным и т.д.)? Часто эту проблему называют проблемой логического проектирования баз данных. 2. Как обеспечить эффективность выполнения запросов к базе данных, т.е. каким образом, имея в виду особенности конкретной СУБД, расположить данные во внешней памяти, создание каких дополнительных структур (например, индексов) потребовать и т.д.? Эту проблему называют проблемой физического проектирования баз данных. Информационная избыточность – термин из теории информации, означающий превышение количества информации, используемой для передачи или хранения сообщения, над его информационной энтропией. Информационная избыточность ведет не только к увеличению требуемого объема памяти для хранения информации содержащейся в базе данных. Нормализация - Процесс преобразования отношений базы данных к виду, отвечающему нормальным формам. Ссылочная целостность (Referential Integrity) — необходимое качество реляционной базы, заключающееся в отсутствии в любом её отношении внешних ключнй, ссылающихся на несуществующие кортежи. Связи, типы связей (между таблицами/сущностями). Один к одному. Тип связи при котором 1 записи из таблицы А соотв. 1 запись таблицы Б. Пример: Студент – Профиль. (у 1-го студента только 1 профиль) Один ко многим (много к одному). Тип связи при котором 1 записи из таблицы А соотв. Несколько записей таблицы Б. Пример: Студент – Группа. (У студента как правило, только 1 группа, но в той же группе – много студентов.) Многие ко многим. Тип связи в котором несколько записей из таблицы А соотв. Нескольким записям таблицы Б. Пример: Студент - предмет или студент – преподаватель. У студента множество предметов, и один и тот же предмет читается у многих студентов. Ключи. Первичный ключ (PRIMARY) - служит как ограничение целостности в рамках одной таблицы для однозначной идентификации, конкретно поле первичного ключа не может повторятся или быть пустым. Внешний ключ (FOREIGN) - служит как ограничение целостности связей нескольких таблиц, конкретно подчиненная таблица не может ссылаться на несуществующие записи главной таблицы(что позволяет строить целостные модели данных). SQL SQL (Structured query language) — «язык структурированных запросов» — формальный непроцедурный язык, применяемый для создания, модификации и управления данными в произвольной реляционной БД, управляемой соответствующей системой управления базами данных (СУБД). Типы данных в MySQL: Наиболее часто используемые на практике типы данных, применяемые при построении структур: INT Целочисленный 10 CHAR Символ, набор символов 'sql' VARCHAR *Строка не фиксированной quick brown fox' длины DECIMAL Вещественное число 14.251 TIMESTAMP Штамп времени 2015-05-20 11:03:55 TEXT Текст 'quick brown fox' ENUM Перечисление 'stud','prep' SET Набор значений 'stud','prep' Манипуляции с данными в MySQL Пример создания таблицы пользователей: CREATE TABLE `persons` ( `id` int NOT NULL AUTO_INCREMENT, `fullname` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `phone` varchar(255) NOT NULL, `role` enum('student','teacher') DEFAULT 'student', PRIMARY KEY (`id`) ); Удаление таблицы: DROP TABLE `persons` Вставка данных в таблицу: INSERT INTO `persons` (`fullname`, `email`, `phone`) VALUES('Иванов', 'test@gmail.com', '+380938941645'); INSERT INTO `persons` SET `fullname`='Иванов', `email`='test@gmail.com', `phobe`='+380938941645'; Выборка данных из таблицы: SELECT * FROM `persons` WHERE `role`='teacher' ORDER BY `fullname` ASC Модификация данных: UPDATE `persons` SET `email`='test@yahoo.com' WHERE `email`='test@gmail.com'; Удаление данных: DELETE FROM `persons` WHERE `id`=1; Выборка из нескольких таблиц: SELECT * FROM `persons` p LEFT JOIN `courses_to_persons` ctp ON ctp.`person_id` = p.`id` LEFT JOIN `courses` c ON c.`id` = ctp.`course_id` GROUP BY p.`id` Индексы. Виды (типы) индексов в MySQL Первичный ключ (PRIMARY KEY) – это основной ключ, который в таблице может быть только один. Он позволяет идентифицировать уникальные записи в таблице. Значения, которые находятся в столбце, где поля имеют PRIMARY KEY, не могут повторяться. Нередко первичный ключ назначают для полей с идентификатором id. Уникальный ключ (UNIQUE) – по сути, это альтернатива первичному ключу: значения, которые содержатся в таких полях также не могут повторяться и иметь значение NULL. Составной индекс – позволяет включать в индекс несколько полей, по которым часто происходит выборка. Например, если в условиях часто фигурирует два параметра: SELECT `fullname` FROM `persons` WHERE `role` = 'student' При использовании таких запросов составной индекс по полям city и age поможет ускорить выборку данных. Недостатки использования индексов: 1. В процессе индексирования MySQL создает дополнительные таблицы, в которых хранятся отсортированные данные. Однако, в большинстве случаев выгоды от быстродействия более ощутимы, чем издержки физической памяти. 2. Запросы на вставку данных в таблицу выполняются чуть дольше, посколько MySQL требуется создать новые индексы и реорганизовать данные в предназначеных для этого таблицах. Но поскольку запросы на вставку выполняются реже, чем на извлечение данных, то серьезных потерь это обычно не приносит. Полезные ссылки: Проектирование БД: http://zametkinapolyah.ru/zametki-o-mysql/proektirovanie-baz-dannyxinformacionnaya-izbytochnost-izbytochnost-dannyx-v-baze-dannyx-problemy-voznikayushhie-izza-informacionnoj-izbytochnosti.html Индексы: http://poleshuk.ru/indeksy-v-mysql/ Ключи: https://sites.google.com/site/gosyvmkss12/bazy-dannyh/17-ponatie-kluca-v-bazah-dannyhpervicnye-i-vnesnie-kluci Типы MySQL: http://phpclub.ru/mysql/doc/column-types.html