# Entity-Relationship и SQL ## Реляционные СУБД: Что это и Зачем? Реляционные СУБД - строго структурированные СУБД в форме связанных таблиц. Каждая таблица отражает ту или иную сущность (_Entity_), которая связана (относится, _Relation_) с другими таблицами. Считается, что таблицы имеют строгую структуру полей, но неограниченное количество строк. ### Примеры - Школа-Классы-Ученики-Учителя - Автомобиль-Детали - Люди-Домашние питомцы - Библиотека-Читатели-Книги - Человек-Номера телефонов - etc... ## Плюсы и минусы ### Плюсы - Скорость работы - Структурированность - Легкость в проектировании на начальном этапе при хорошо описанной предметной области - Хорошая теоретическая и практическая базы ### Минусы - Сложности с расширением и изменением - Масштабируемость ## Сущности и Связи **Сущность** - тот или иной объект реального (или виртуального) мира, ради хранения информации о котором и делается СУБД. Набор данных о сущностях разделяется на поля и хранится в таблицах. При разработке СУБД заранее определяются сущности предметной области и отношения и количественные отношения между ними, для установки соответствующих связей. **Связь** - логическое отношение, реализуемое с помощью специальных полей в таблицах. Для установки связности СУБД используется уникальный идентификатор (поле) каждой записи (строки) в таблице. ## Поля Типы полей во многом похожи на привычные типы данных в языках программирования: числа, строки и так далее. Однако структуры данных (объекты, ассоциативные и обычные массивы) согласно теории должны быть преобразованы к тем или иным реляционным формам. Для идентификации записей используются специальный тип данных **Автоинкремент**, который гарантирует уникальность каждой записи в пределах таблицы. ## Типы связей ### Один к одному Однозначное соответствие двух сущностей друг другу. Человек и его отпечаток пальца, например. Редкий вид связи, зачастую используется для расширения сущности дополнительными параметрами. ### Один ко многим Самый частый случай. Класс и ученики, Город и его жители, Ребенок и его родители и так далее. Связь устанавливается с помощью сохранения значения автоинкремента _одного_ в каждом экземпляре _многих_. ### Многие ко многим Тоже часто встречаемый случай, достаточно сложный в реализации, так как требует введения дополнительной таблицы для связности. Например книги в библиотеке и их читатели: каждый читатель может прочитать более одной книги, каждая книга бывает прочитана более чем одним читателем. Для связи заводится смежная таблица, в которой хранятся автоинкременты обоих связываемых сущностей - например номер книги и номер паспорта читателя, а так же дополнительная информация, относящаяся к связи (например дата и время выдачи книги читателю) # ER-Диаграммы **ER-Диаграммы** позволяют изобразить структуру реляционной СУБД в наглядном виде. Сущности отображаются таблицами с описанием полей и первичных ключей, служащих для указания связности. Связи - линиями между таблицами разных видов. ## Задание 1 Нарисовать в общем виде структуру из нескольких таблиц со связями **один ко многим** и **многие к одному**, придуманной предметной области. Сохранить в гугл-диск. # SQL **SQL** (*Structured Query Language*, *Структурированный Язык Запросов*) - язык, на котором происходит взаимодействие с СУБД. Подразделяется на две части: - **DDL** (*Data Definition Language*) - служит для создания таблиц, изменения их структуры и связей между ними. - **DML** (*Data Manipulation Language*) - оперирует данными в таблицах (выборка и запись). Так как на этом занятии мы рассматриваем структуру СУБД, то предметом нашего изучения сегодня будет DDL, а именно операции создания и изменения структуры таблиц. ## Типы данных MySQL Базы данных в целом хранят те же типы данных, что и обрабатываются компьютерными программами, однако в силу ориентированности на хранение большого количества данных, типы указываются более точно. Например для строк задается их длина, есть несколько видов целых и вещественных чисел и так далее. | Тип | Описание | | --------------------------------- | ----------------------------------------------------------------------------- |