|
@@ -6,12 +6,118 @@
|
|
|
|
|
|
|
|
# Основы проектирования баз данных. ERD.
|
|
# Основы проектирования баз данных. ERD.
|
|
|
|
|
|
|
|
|
|
+* [Введение](#введение)
|
|
|
* [Этапы проектирования БД](#этапы-проектирования-бд)
|
|
* [Этапы проектирования БД](#этапы-проектирования-бд)
|
|
|
* [Основные элементы **ERD**.](#основные-элементы-erd)
|
|
* [Основные элементы **ERD**.](#основные-элементы-erd)
|
|
|
* [Концептуальное проектирование](#концептуальное-проектирование)
|
|
* [Концептуальное проектирование](#концептуальное-проектирование)
|
|
|
* [Логическое проектирование](#логическое-проектирование)
|
|
* [Логическое проектирование](#логическое-проектирование)
|
|
|
* [Физическое проектирование](#физическое-проектирование)
|
|
* [Физическое проектирование](#физическое-проектирование)
|
|
|
|
|
|
|
|
|
|
+## Введение в базы данных
|
|
|
|
|
+
|
|
|
|
|
+>Взято [отсюда](https://habr.com/ru/articles/686816/)
|
|
|
|
|
+
|
|
|
|
|
+### Что такое база данных и зачем она?
|
|
|
|
|
+
|
|
|
|
|
+Компании часто собирают информацию о своих клиентах, сотрудниках, операциях, финансах и т. д. Потом эту информацию можно выгодно использовать. Например, можно ее проанализировать и понять, какими способами можно увеличить прибыль. Можно на ее основе построить хитрые ML-модели, которые помогут улучшить продукт. Или, в конце концов, эту информацию можно просто перепродать другим компаниям.
|
|
|
|
|
+
|
|
|
|
|
+Чтоб собирать и анализировать информацию, надо уметь ее сохранять. Конечно, можно сохранять информацию в печатном виде в обычных папках или в Excel-файлах. И многие компании до сих пор так сохраняют информацию. Однако, такое подойдет только для маленьких компаний с небольшим количеством данных. Когда компания вырастает, то и данных становится много, такие варианты сохранения информации становятся непригодны. Тогда на помощь приходят базы данных.
|
|
|
|
|
+
|
|
|
|
|
+Базы данных помогают справиться с большим количеством проблем, решить которые папкам и Excel-файлам не под силу:
|
|
|
|
|
+
|
|
|
|
|
+* В базе данных можно хранить огромное количество данных – миллиарды и триллионы записей;
|
|
|
|
|
+* Базы (точнее СУБД) помогают защищать данные - они позволяют давать доступ к данным только определенному кругу лиц. При этом можно ставить ограничения, кому к каким данным можно давать доступ и какого типа доступ, только чтение или редактирование тоже;
|
|
|
|
|
+* Базы данных могут помогать следить за правильностью данных с помощью различного вида проверок;
|
|
|
|
|
+* Также, базы данных могут позволять большому количеству людей одновременно взаимодействовать с данными.
|
|
|
|
|
+
|
|
|
|
|
+Так что же такое база данных? Если говорить коротко, то это определенная структура, в которой хранится информация. Я понимаю, что из этого определения пока мало что понятно. Однако, более конкретное определение дать сложно, потому что существует много типов баз данных, и все они совершенно разные.
|
|
|
|
|
+
|
|
|
|
|
+Я думаю, это определение станет понятнее, когда я далее опишу наиболее популярные типы баз данных на конкретных примерах.
|
|
|
|
|
+
|
|
|
|
|
+### Типы баз данных
|
|
|
|
|
+
|
|
|
|
|
+Существует много разных типов баз данных. Наиболее популярные типы:
|
|
|
|
|
+
|
|
|
|
|
+* Реляционные базы данных
|
|
|
|
|
+* Key-value базы данных
|
|
|
|
|
+* Документно-ориентированные базы данных
|
|
|
|
|
+* Графовые базы данных
|
|
|
|
|
+* Колоночные базы данных
|
|
|
|
|
+
|
|
|
|
|
+Далее я расскажу о каждом из этих типов. Однако, начну я реляционных баз данных и больше всего буду рассказывать о них, потому что именно этим типом баз данных чаще всего пользуются аналитики данных и data scientist-ы.
|
|
|
|
|
+
|
|
|
|
|
+### Реляционные базы данных (MySQL, PostgreSQL, Oracle DB)
|
|
|
|
|
+
|
|
|
|
|
+**Реляционная база данных** – это база данных, которая состоит из таблиц. У реляционной базы данных две очень важные характеристики:
|
|
|
|
|
+
|
|
|
|
|
+* Данные распределены по смыслу по таблицам
|
|
|
|
|
+* Между таблицами есть отношения
|
|
|
|
|
+
|
|
|
|
|
+Рассмотрим пример реляционной базы. Допустим, у нас есть сервис доставки еды. Тогда, если мы построим реляционную базу данных для этого сервиса, то она, скорее всего, будет содержать следующие таблицы:
|
|
|
|
|
+
|
|
|
|
|
+* Таблица с заказами
|
|
|
|
|
+* Таблица с клиентами
|
|
|
|
|
+* Таблица с курьерами
|
|
|
|
|
+* Таблица с ресторанами
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+Второй важной характеристикой реляционных баз данных является то, что между таблицами существуют отношения. Отношения между таблицами определяются с помощью _primary key_ и _foreign key_.
|
|
|
|
|
+
|
|
|
|
|
+**Primary key** (первичный ключ) – это столбец (или группа столбцов) таблицы, который содержит уникальные значения для каждой строки. На примере выше primary key каждой таблицы выделены зеленым цветом. То есть, например, в таблице с заказами каждая строка будет описывать отдельный заказ. Не будет двух строк, которые описывают один и тот же заказ, потому ID заказа будет разный для каждой строки.
|
|
|
|
|
+
|
|
|
|
|
+**Foreign key** (внешний ключ) – это столбец в таблице, который содержит primary key другой таблицы. На рисунке foreign key отмечены желтым. То есть, таблица с заказами содержит ID клиента, который является primary key в таблице с клиентами, но в таблице с заказами он будет foreign key.
|
|
|
|
|
+
|
|
|
|
|
+Primary key и foreign key помогают не только связывать между собой таблицы реляционной базы данных отношениями. Они еще помогают следить за целостностью и правильностью данных в базе. Например, если мы ошибемся в ID клиента, добавляя новый заказ в таблицу с заказами, то база выдаст ошибку, так как не найдет соответствующий ID клиента в таблице с клиентами.
|
|
|
|
|
+
|
|
|
|
|
+Для взаимодействия с реляционными базами данных чаще всего используется SQL (Structured Query Language). Это специальный язык программирования, на котором пишутся запросы к реляционной базе. SQL-запросами можно создавать и удалять таблицы в реляционной базе, изменять данные в существующих таблицах и доставать из таблиц необходимую информацию.
|
|
|
|
|
+
|
|
|
|
|
+Как уже говорилось выше, реляционные базы данных удобно использовать в аналитике, так как информация в них структурирована и распределена по смыслу, что, конечно, мечта любого аналитика. Однако, аналитики часто пишут сложные и не очень эффективные SQL-запросы, потому важно придумывать способы ускорения обработки запросов к реляционной базе.
|
|
|
|
|
+
|
|
|
|
|
+Одним из наиболее популярных методов ускорения работы запросов к реляционным базам данных является индексирование таблиц. Индекс (index key) – это специальная структура данных, связанная с таблицей и конкретным столбцом (или столбцами) в ней. Она содержит копии данных из индексируемых столбцов, отсортированные в определённом порядке, и указатели на фактическое местоположение соответствующих строк в таблице.
|
|
|
|
|
+
|
|
|
|
|
+Важно понимать, что индекс — это не волшебное решение всех проблем. Он занимает дополнительное дисковое пространство и требует ресурсов на своё обновление при добавлении, изменении или удалении данных в таблице. Поэтому к созданию индексов следует подходить обдуманно.
|
|
|
|
|
+
|
|
|
|
|
+Приведу пример работы индекса. Например, мы хотим найти все заказы клиента `007` из ресторана `1`. Тогда, если у нас в таблице с заказами нет индекса, то мы будем перебирать все заказы пока не найдем нужные. Если же у нас есть индекс в таблице с заказами, то ситуация будет иной. Допустим, что индексом является столбец ID ресторана. Тогда наши данные в таблице с заказами будут сгруппированы по ID ресторана. И тогда при поиске заказов клиента `007` из ресторана `1`, мы не будем перебирать всю таблицу с заказами, а найдем группу заказов из ресторана `1` и будем искать необходимые данные внутри этой группы.
|
|
|
|
|
+
|
|
|
|
|
+Из примера выше с индексом выше понятно, что в индекс выгодно добавлять такой столбец, в разрезе которого часто ищутся данные.
|
|
|
|
|
+
|
|
|
|
|
+Также, одним из важных свойств реляционных баз данных является соответствие требованиям ACID. Я не буду углубляться в детали этих требований, только отмечу, что эти требования гарантируют целостность и корректность данных, несмотря на ошибки, системные сбои, перебои в питании, изменение данных несколькими пользователями одновременно и прочие необычные ситуации.
|
|
|
|
|
+
|
|
|
|
|
+Выглядит так, что реляционная база данных идеальная база, и непонятно, почему бы постоянно ее не использовать. Однако, у реляционной базы данных есть и недостатки, и потому данный тип не всегда подходит для нужд бизнеса. Например, реляционная база данных не подходит для данных без четкой структуры, потому что мы не сможем разложить эти данные в отдельные таблицы по смыслу. А данных без четкой структуры гораздо больше, чем данных с четкой структурой.
|
|
|
|
|
+
|
|
|
|
|
+### Какие еще есть типы баз данных?
|
|
|
|
|
+
|
|
|
|
|
+Прочие типы баз данных, которые не реляционные, часто называются noSQL базы данных. Обсудим наиболее популярные типы нереляционных баз данных.
|
|
|
|
|
+
|
|
|
|
|
+#### **Key-value** базы данных (пример - Redis)
|
|
|
|
|
+
|
|
|
|
|
+Название говорит о том, какие данные удобно хранить в Key-value базе – в такой базе хранят данные, которые удобно представить в виде пары ключ-значение. Основное преимущество таких баз – это очень быстрый поиск значения по ключу. При этом значение может содержать какие угодно типы данных.
|
|
|
|
|
+
|
|
|
|
|
+Такие базы данных удобно применять в проектах, где необходимо выдавать быстрый результат по ключу, например, для онлайн торгов или сделок.
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#### **Документно-ориентированные** (пример - Mongo DB)
|
|
|
|
|
+
|
|
|
|
|
+В документно-ориентированной базе данных единицей хранения является документ (который может быть в формате json, или xml, или в каком-нибудь еще формате). Удобство таких баз в том, что в них быстро и легко записывать любые типы данных, при этом эти данные не обязаны обладать четкой структурой. Минус таких баз в том, что данные в них неудобно анализировать.
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#### **Графовые** базы данных (пример - Orient DB)
|
|
|
|
|
+
|
|
|
|
|
+Как следует из названия, в графовой базе данных данные хранятся в виде графов. Данный тип баз удобен, когда надо находить информацию не только о каком-то объекте, но и доставать информации о связах этого объекта с другими.
|
|
|
|
|
+
|
|
|
|
|
+Например, данный тип баз может использоваться для нахождения куки конкретного юзера и всех взаимосвязанных с этой кукой идентификаторов. Также, такой тип данных часто используется социальными сетями для сохранения информации не только о пользователях, но и о связях каждого пользователя с другими.
|
|
|
|
|
+
|
|
|
|
|
+#### Колоночные (столбцовые) базы данных (примеры - Cassandra, Clickhouse)
|
|
|
|
|
+
|
|
|
|
|
+В реляционных базах данных данные записаны в виде строк. Что же касается колоночных баз данных, то тут данные записываются в виде столбцов. Потому поиск данных в колоночной базе данных осуществляется не перебором всех строк, как это происходит в реляционной базе данных, а поиском необходимого значения в тех столбцах таблицы, которые нас интересуют.
|
|
|
|
|
+
|
|
|
|
|
+Преимущество колоночных баз данных в том, что они могут быстро находить определенные значения в столбцах, которые нас интересуют.
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
Традиционно процедуру проектирования базы данных разбивают на три этапа, каждый из которых завершается созданием соответствующей информационной модели.
|
|
Традиционно процедуру проектирования базы данных разбивают на три этапа, каждый из которых завершается созданием соответствующей информационной модели.
|
|
|
|
|
|
|
|
## Этапы проектирования БД
|
|
## Этапы проектирования БД
|