Răsfoiți Sursa

добавил введение в БД

Евгений Колесников 5 luni în urmă
părinte
comite
3d2fb51549

+ 106 - 0
articles/5_1_1_1_erd2.md

@@ -6,12 +6,118 @@
 
 # Основы проектирования баз данных. ERD.
 
+* [Введение](#введение)
 * [Этапы проектирования БД](#этапы-проектирования-бд)
 * [Основные элементы **ERD**.](#основные-элементы-erd)
 * [Концептуальное проектирование](#концептуальное-проектирование)
 * [Логическое проектирование](#логическое-проектирование)
 * [Физическое проектирование](#физическое-проектирование)
 
+## Введение в базы данных
+
+>Взято [отсюда](https://habr.com/ru/articles/686816/)
+
+### Что такое база данных и зачем она?
+
+Компании часто собирают информацию о своих клиентах, сотрудниках, операциях, финансах и т. д. Потом эту информацию можно выгодно использовать. Например, можно ее проанализировать и понять, какими способами можно увеличить прибыль. Можно на ее основе построить хитрые ML-модели, которые помогут улучшить продукт. Или, в конце концов, эту информацию можно просто перепродать другим компаниям.
+
+Чтоб собирать и анализировать информацию, надо уметь ее сохранять. Конечно, можно сохранять информацию в печатном виде в обычных папках или в Excel-файлах. И многие компании до сих пор так сохраняют информацию. Однако, такое подойдет только для маленьких компаний с небольшим количеством данных. Когда компания вырастает, то и данных становится много, такие варианты сохранения информации становятся непригодны. Тогда на помощь приходят базы данных.
+
+Базы данных помогают справиться с большим количеством проблем, решить которые папкам и Excel-файлам не под силу:
+
+* В базе данных можно хранить огромное количество данных – миллиарды и триллионы записей;
+* Базы (точнее СУБД) помогают защищать данные - они позволяют давать доступ к данным только определенному кругу лиц. При этом можно ставить ограничения, кому к каким данным можно давать доступ и какого типа доступ, только чтение или редактирование тоже;
+* Базы данных могут помогать следить за правильностью данных с помощью различного вида проверок;
+* Также, базы данных могут позволять большому количеству людей одновременно взаимодействовать с данными.
+
+Так что же такое база данных? Если говорить коротко, то это определенная структура, в которой хранится информация. Я понимаю, что из этого определения пока мало что понятно. Однако, более конкретное определение дать сложно, потому что существует много типов баз данных, и все они совершенно разные.
+
+Я думаю, это определение станет понятнее, когда я далее опишу наиболее популярные типы баз данных на конкретных примерах.
+
+### Типы баз данных
+
+Существует много разных типов баз данных. Наиболее популярные типы:
+
+* Реляционные базы данных
+* Key-value базы данных
+* Документно-ориентированные базы данных
+* Графовые базы данных
+* Колоночные базы данных
+
+Далее я расскажу о каждом из этих типов. Однако, начну я реляционных баз данных и больше всего буду рассказывать о них, потому что именно этим типом баз данных чаще всего пользуются аналитики данных и data scientist-ы.
+
+### Реляционные базы данных (MySQL, PostgreSQL, Oracle DB)
+
+**Реляционная база данных** – это база данных, которая состоит из таблиц. У реляционной базы данных две очень важные характеристики:
+
+* Данные распределены по смыслу по таблицам
+* Между таблицами есть отношения
+
+Рассмотрим пример реляционной базы. Допустим, у нас есть сервис доставки еды. Тогда, если мы построим реляционную базу данных для этого сервиса, то она, скорее всего, будет содержать следующие таблицы:
+
+* Таблица с заказами
+* Таблица с клиентами
+* Таблица с курьерами
+* Таблица с ресторанами
+
+![](../img/delivery.png)
+
+Второй важной характеристикой реляционных баз данных является то, что между таблицами существуют отношения. Отношения между таблицами определяются с помощью _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 базе – в такой базе хранят данные, которые удобно представить в виде пары ключ-значение. Основное преимущество таких баз – это очень быстрый поиск значения по ключу. При этом значение может содержать какие угодно типы данных. 
+
+Такие базы данных удобно применять в проектах, где необходимо выдавать быстрый результат по ключу, например, для онлайн торгов или сделок.
+
+![](../img/key_value.png)
+
+#### **Документно-ориентированные** (пример - Mongo DB)
+
+В документно-ориентированной базе данных единицей хранения является документ (который может быть в формате json, или xml, или в каком-нибудь еще формате). Удобство таких баз в том, что в них быстро и легко записывать любые типы данных, при этом эти данные не обязаны обладать четкой структурой. Минус таких баз в том, что данные в них неудобно анализировать. 
+
+![](../img/doc_oriened.png)
+
+#### **Графовые** базы данных (пример - Orient DB)
+
+Как следует из названия, в графовой базе данных данные хранятся в виде графов. Данный тип баз удобен, когда надо находить информацию не только о каком-то объекте, но и доставать информации о связах этого объекта с другими. 
+
+Например, данный тип баз может использоваться для нахождения куки конкретного юзера и всех взаимосвязанных с этой кукой идентификаторов. Также, такой тип данных часто используется социальными сетями для сохранения информации не только о пользователях, но и о связях каждого пользователя с другими.
+
+#### Колоночные (столбцовые) базы данных (примеры - Cassandra, Clickhouse)
+
+В реляционных базах данных данные записаны в виде строк. Что же касается колоночных баз данных, то тут данные записываются в виде столбцов. Потому поиск данных в колоночной базе данных осуществляется не перебором всех строк, как это происходит в реляционной базе данных, а поиском необходимого значения в тех столбцах таблицы, которые нас интересуют. 
+
+Преимущество колоночных баз данных в том, что они могут быстро находить определенные значения в столбцах, которые нас интересуют.
+
+---
+
 Традиционно процедуру проектирования базы данных разбивают на три этапа, каждый из которых завершается созданием соответствующей информационной модели.
 
 ## Этапы проектирования БД

BIN
docs/Описание предметной области.pdf


BIN
img/delivery.png


BIN
img/key_value.png