فهرست منبع

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

Евгений Колесников 5 ماه پیش
والد
کامیت
3d2fb51549
4فایلهای تغییر یافته به همراه106 افزوده شده و 0 حذف شده
  1. 106 0
      articles/5_1_1_1_erd2.md
  2. BIN
      docs/Описание предметной области.pdf
  3. BIN
      img/delivery.png
  4. BIN
      img/key_value.png

+ 106 - 0
articles/5_1_1_1_erd2.md

@@ -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)
+
+**Реляционная база данных** – это база данных, которая состоит из таблиц. У реляционной базы данных две очень важные характеристики:
+
+* Данные распределены по смыслу по таблицам
+* Между таблицами есть отношения
+
+Рассмотрим пример реляционной базы. Допустим, у нас есть сервис доставки еды. Тогда, если мы построим реляционную базу данных для этого сервиса, то она, скорее всего, будет содержать следующие таблицы:
+
+* Таблица с заказами
+* Таблица с клиентами
+* Таблица с курьерами
+* Таблица с ресторанами
+
+![](../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