Базы данных. СУБД MySQL

advertisement
Лекция
Базы данных. СУБД 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
Download