Базы данных: различия между версиями

Материал из Artem Aleksashkin's Wiki
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
 
(не показано 5 промежуточных версий этого же участника)
Строка 2: Строка 2:


* [[Теория баз данных]]
* [[Теория баз данных]]
 
* [[СУБД]]
== ACID ==
* [[Открытые базы данных]]
* Atomicity — Атомарность
* [[Nested Sets & Materialized Path]]
* Consistency — Согласованность
* Isolation — Изолированность
* Durability — Долговечность
 
== Нормальные формы ==
 
{| class="wikitable"
|+ Плохо спроектированная база данных
|-
! Жанр !! Трек 1 !! Трек 2 !! Трек 3 !! Трек 4 !! Трек 5
|-
| Рок || AC/DC Thunderstrack || Guns n Roses Sweet Child O Mine || Nirvana Smells like teen spirit || 3 Doors Down Here Without You || Led Leppelin Song remains the same
|-
| Trance || Armin Van Buuren Going Wrong || Avicii Levels || Prodigy Voodoo Peple || Armin Van Buuren Virtual Friend || Armin Van Buuren Virtual Friend
|}
 
Проблемы:
* Для добавления треков нужно добавлять столбцы
* Сложности при поиске и сортировки данных
 
{| class="wikitable"
|+ Нарушена 1NF
|-
! Жанр !! Треки
|-
| Рок || AC/DC Thunderstrack,Guns n Roses Sweet Child O Mine,Nirvana Smells like teen spirit,3 Doors Down Here Without You,Led Leppelin Song remains the same
|-
| Trance || Armin Van Buuren Going Wrong,Avicii Levels,Prodigy Voodoo Peple,Armin Van Buuren Virtual Friend,Armin Van Buuren Virtual Friend
|}
 
Проблемы:
* Сложности при поиске и сортировки данных
* В названии треков могут быть запятые
 
Правило:
* Все элементы внутри ячеек должны быть атомарными(элемент называется атомарным, если таблицы могут его использовать независимо друг от друга)
 
{| class="wikitable"
|+ Правило выполнено, но нарушена 1NF
|-
! Жанр !! Исполнитель !! Трек
|-
| Рок || AC/DC || Thunderstrack
|-
| Рок || Guns n Roses || Sweet Child O Mine
|-
| Рок || Nirvana || Smells like teen spirit
|-
| Рок || 3 Doors Down || Here Without You
|-
| Рок || Led Leppelin || Song remains the same
|-
| Trance || Armin Van Buuren || Going Wrong
|-
| Trance || Avicii || Levels
|-
| Trance || Prodigy || Voodoo Peple
|-
| Trance || Armin Van Buuren || Virtual Friend
|-
| Trance || Armin Van Buuren || Virtual Friend
|}
 
Правило:
* Все строки должны быть уникальными
 
=== 1NF - первая нормальная форма ===
 
{| class="wikitable"
|+ 1NF
|-
! Альбом !! Номер трека !! Жанр !! Исполнитель !! Трек
|-
| Fire Your Guns || 1-1 || Рок || AC/DC || Thunderstrack
|-
| Appetite for Destruction || 9 || Рок || Guns n Roses || Sweet Child O Mine
|-
| Nevermind || 1 || Рок || Nirvana || Smells like teen spirit
|-
| Away from the Sun || 6 || Рок || 3 Doors Down || Here Without You
|-
| The Song Remains the Same || 1-3 || Рок || Led Leppelin || Song remains the same
|-
| Imagine|| 2 || Trance || Armin Van Buuren || Going Wrong
|-
| Levels || 1 || Trance || Avicii || Levels
|-
| Music for the Jilted Generation || 5 || Trance || Prodigy || Voodoo Peple
|-
| Mirage || 9 || Trance || Armin Van Buuren || Virtual Friend
|-
| Mirage || 21 || Trance || Armin Van Buuren || Virtual Friend
|}
 
Уникальные поля(первичный ключ):
* Альбом
* Номер трека
 
Задача:
* Мы хотим изменить жанр у исполнителя Armin Van Buuren с Trance на Progressive trance
 
Проблемы:
* Нам необходимо обновить несколько ячеек. Это может привести к ошибкам
 
Правило:
* Любое поле, не входящее в первичный ключ, функционально полно зависит от первичного ключа
 
=== 2NF - вторая нормальная форма ===
 
{| class="wikitable"
|+ 2NF - Треки
|-
! Альбом !! Номер трека !! ID Исполнителя !! Трек
|-
| Fire Your Guns || 1-1 || 1 || Thunderstrack
|-
| Appetite for Destruction || 9 || 2 || Sweet Child O Mine
|-
| Nevermind || 1 || 3 || Smells like teen spirit
|-
| Away from the Sun || 6 || 4 || Here Without You
|-
| The Song Remains the Same || 1-3 || 5 || Song remains the same
|-
| Imagine|| 2 || 6 || Going Wrong
|-
| Levels || 1 || 7 || Levels
|-
| Music for the Jilted Generation || 5 || 8 || Voodoo Peple
|-
| Mirage || 9 || 6 || Virtual Friend
|-
| Mirage || 21 || 6 || Virtual Friend
|}
 
{| class="wikitable"
|+ 2NF - Исполнители
|-
! ID !! Исполнитель !! Жанр
|-
| 1 || AC/DC || Рок
|-
| 2 || Guns n Roses || Рок
|-
| 3 || Nirvana || Рок
|-
| 4 || 3 Doors Down || Рок
|-
| 5 || Led Leppelin || Рок
|-
| 6 || Armin Van Buuren || Progressive trance
|-
| 7 || Avicii || Trance
|-
| 8 || Prodigy || Trance
|}
 
Задача
* Изменить имя альбома Mirage на Mirage 2010
 
Проблема:
* Необходимо обновлять все строки. Может произойти ошибка
 
Правило:
 
* Любой атрибут таблицы функционально зависит только от первичного ключа
 
=== 3NF - третья нормальная форма ===
 
{| class="wikitable"
|+ 3NF - Треки
|-
! ID Альбома !! Номер трека !! ID Исполнителя !! Трек
|-
| 1 || 1-1 || 1 || Thunderstrack
|-
| 2 || 9 || 2 || Sweet Child O Mine
|-
| 3 || 1 || 3 || Smells like teen spirit
|-
| 4 || 6 || 4 || Here Without You
|-
| 5 || 1-3 || 5 || Song remains the same
|-
| 6 || 2 || 6 || Going Wrong
|-
| 7 || 1 || 7 || Levels
|-
| 8 || 5 || 8 || Voodoo Peple
|-
| 9 || 9 || 6 || Virtual Friend
|-
| 9 || 21 || 6 || Virtual Friend
|}
 
{| class="wikitable"
|+ 3NF - Исполнители
|-
! ID !! Исполнитель !! ID Жанра
|-
| 1 || AC/DC || 1
|-
| 2 || Guns n Roses || 1
|-
| 3 || Nirvana || 1
|-
| 4 || 3 Doors Down || 1
|-
| 5 || Led Leppelin || 1
|-
| 6 || Armin Van Buuren || 2
|-
| 7 || Avicii || 3
|-
| 8 || Prodigy || 3
|}
 
{| class="wikitable"
|+ 3NF - Жанры
|-
! ID !! Жанр
|-
| 1 || Рок
|-
| 2 || Progressive trance
|-
| 3 || Trance
|}
 
{| class="wikitable"
|+ 3NF - Альбомы
|-
! ID !! Альбом
|-
| 1 || Fire Your Guns
|-
| 2 || Appetite for Destruction
|-
| 3 || Nevermind
|-
| 4 || Away from the Sun
|-
| 5 || The Song Remains the Same
|-
| 6 || Imagine
|-
| 7 || Levels
|-
| 8 || Music for the Jilted Generation
|-
| 9 || Mirage 2010
|}
 
=== BCNF - нормальная форма Бойса-Кодда ===
=== 4NF - Многозначные зависимости и четвертая нормальная форма ===
=== 5NF - Зависимости по соединению и пятая нормальная форма ===
 
== СУБД, системы поиска и хранения ==
 
* [[MySQL]]
*[[MariaDB]]
**  [[Percona]]
* [[PostgreSQL]]
* [[MongoDB]]
* [[Sphinx]]
* [[ElasticSearch]]
* [[Neo4j]]
* [[ClickHouse]]
 
== Некоторые полезные ресурсы ==
* [http://www.mstu.edu.ru/study/materials/zelenkov/toc.html ВВЕДЕНИЕ В БАЗЫ ДАННЫХ - отличные лекции по теории баз данных]

Текущая версия от 10:24, 12 мая 2023

Базы данных существуют столько же сколько и компьютеры. Компьютеры и создавались обрабатывать информацию. Информацию надо как-то хранить и передавать по запросу - в этом и суть баз данных.