SlideShare a Scribd company logo
1 of 46
Software Craftsmanship
meetup #3
Базы данных:
обзор, нормализация, выбор
Павел Вейник
CTO @ Splitmetrics
CEO @ Hard & Soft Skills
Зачем митапы?
Поделиться с разработчиками Splitmetrics
Поделиться со всеми разработчиками
Обкатать новый курс для техлидов
Пообщаться
Для кого митапы?
Для разработчиков
Для тестировщиков
Для сочувствующих и интересующихся
Нас сегодня много
Зарегистрировались 102 человека, потом
закрыли регистрацию
Мы рады, но мало места
Отправили отказы всем неразработчикам (
Подумаем как решать
План митапов
1. Software Craftsmanship & Agile.
Как не делать говно?
2. Принципы хранения данных
3. Обзор баз данных
4. Очереди сообщений
5. Кэши и файловые хранилища
План этого митапа
1. Типы баз данных
2. Нормализация
3. Критерии выбора для проекта
4. Задачки на архитектуру
Не план этого митапа
microservices
Distributed transactions
Neo4j, Clickhouse, MySQL, CitusDB…
Стоимость хостинга, DB as a Service
Мы учтем эти темы позже, и найдем интересных
спикеров по нюансам
Типы баз данных
Relational DBMS
Document storage
Key-value store
Column-based store
Time series DBMS
Graph DBMS
Object oriented
RDF store
Search engine
XML DBMS
Event stores
Wide column store
Сколько баз данных всего?
Всего 343
 db-engines.com
Нормализация
Способ организовать таблицы и поля в
реляционной бд
Для чего?
Нормализация
Правильно проектировать RDBMS
Избегаем последствий:
Неудобно писать запросы
Дублирование данных
Нарушение целостности данных
Нарушение логики работы приложения
Нормальные формы
Первая НФ
Вторая НФ
Третья НФ
НФ Бойса-Кодда
Четвертая НФ
Пятая НФ
Доменно-ключевая НФ
Шестая НФ
Первая НФ
Термины реляционной алгебры
Не все )
Каждый атрибут (поле) отношения (таблицы)
должен хранить только одно значение
Не список
Не кортеж
Первая НФ
Облегчаем запросы
Облегчаем обновление
Понятие атомарности (одно значение)
неоднозначно
ФИО – один атрибут или три?
Первая НФ
Наим. Город Адрес Эл. почта WWW Вид Конт. лица
Поршневой
з-д
Владимир Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик Иванов И.И., зам. дир., тел
(3254)76-15-95
Петров П.П., нач. отд. сбыта, тел
(3254)76-15-35
ООО
Вымпел
Курск Ул. Гоголя, 25 pennon@mail.ru Клиент Сидоров С.С., директор, тел.
(7634)66-65-38
ИЧП Альфа Владимир Ул. Пушкинская, 37, оф.
565
alpha323@list.ru Клиент Васильев В.В., директор, тел
(3254)74-57-45
Наим. Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Код города Тел.
Поршневой з-
д
Владимир Ул. 2-я
Кольцевая, 17
info@plunger
.ru
www.plunger.
ru
Поставщик зам. дир. Иванов И.И. 3254 76-15-95
Поршневой з-
д
Владимир Ул. 2-я
Кольцевая, 17
info@plunger
.ru
www.plunger.
ru
Поставщик нач. отд.
сбыта
Петров П.П., 3254 76-15-35
ООО Вымпел Курск Ул. Гоголя, 25 pennon@mai
l.ru
Клиент директор Сидоров С.С. 7634 66-65-38
ИЧП Альфа Владимир Ул. Пушкинская,
37, оф. 565
alpha323@lis
t.ru
Клиент директор Васильев В.В. 3254 74-57-45
Вторая НФ
Отношение находится в 1ой НФ
Каждый неключевой атрибут полностью зависит
от ключа целиком, а не от части ключа
Понятие «зависит» включает в себя транзитивные
зависимости
Если ключ не составной, то 1НФ = 2НФ
Вторая НФ
Облегчаем запросы
Облегчаем обновление
Убираем дублирование данных (не всё)
Выделяем новые таблицы
Вторая НФ
Наим. Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Тел.
Поршневой з-д Владимир Ул. 2-я
Кольцевая, 17
info@plunger.ru www.plunger.ru Поставщик зам. дир. Иванов И.И. 76-15-95
Поршневой з-д Владимир Ул. 2-я
Кольцевая, 17
info@plunger.ru www.plunger.ru Поставщик нач. отд.
сбыта
Петров П.П., 76-15-35
ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент директор Сидоров С.С. 66-65-38
ИЧП Альфа Владимир Ул.
Пушкинская,
37, оф. 565
alpha323@list.ru Клиент директор Васильев В.В. 74-57-45
Наим. Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Код города Тел.
Поршневой з-
д
Владимир Ул. 2-я
Кольцевая, 17
info@plunger
.ru
www.plunger.
ru
Поставщик зам. дир. Иванов И.И. 3254 76-15-95
Поршневой з-
д
Владимир Ул. 2-я
Кольцевая, 17
info@plunger
.ru
www.plunger.
ru
Поставщик нач. отд.
сбыта
Петров П.П., 3254 76-15-35
ООО Вымпел Курск Ул. Гоголя, 25 pennon@mai
l.ru
Клиент директор Сидоров С.С. 7634 66-65-38
ИЧП Альфа Владимир Ул. Пушкинская,
37, оф. 565
alpha323@lis
t.ru
Клиент директор Васильев В.В. 3254 74-57-45
Город Код города
Владимир 3254
Курск 7634
Третья НФ
Отношение находится в 2 НФ
Атрибуты в отношении должны нетранзитивно
зависеть от ключа
Третья НФ
Облегчаем запросы
Облегчаем обновление
Убираем дублирование данных (не всё)
Выделяем новые таблицы
Нарушения 3НФ – наиболее частые
Третья НФ
Наим. Город Адрес Эл. почта WWW Вид
Поршневой з-д Владимир Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик
ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент
ИЧП Альфа Владимир Ул. Пушкинская, 37, оф.
565
alpha323@list.ru Клиент
Наим. Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Тел.
Поршневой з-д Владимир Ул. 2-я
Кольцевая, 17
info@plunger.ru www.plunger.ru Поставщик зам. дир. Иванов И.И. 76-15-95
Поршневой з-д Владимир Ул. 2-я
Кольцевая, 17
info@plunger.ru www.plunger.ru Поставщик нач. отд.
сбыта
Петров П.П., 76-15-35
ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент директор Сидоров С.С. 66-65-38
ИЧП Альфа Владимир Ул.
Пушкинская,
37, оф. 565
alpha323@list.ru Клиент директор Васильев В.В. 74-57-45
Наим. Город Ф.И.О. Должность Тел.
Поршневой з-д Владимир Иванов И.И. зам. дир. 76-15-95
Поршневой з-д Владимир Петров П.П., нач. отд. сбыта 76-15-35
ООО Вымпел Курск Сидоров С.С. директор 66-65-38
ИЧП Альфа Владимир Васильев В.В. директор 74-57-45
НФ Бойса-Кодда
Отношение находится в 3 НФ
Каждая зависимость атрибутов имеет в
качестве главной части некоторый
потенциальный ключ
Потенциальный ключ – набор атрибутов,
уникально и минимально определяющие
кортеж (строку)
НФ Бойса-Кодда
Облегчаем запросы
Облегчаем обновление
Убираем дублирование
Выделяем новые таблицы
Улучшаем соответствие отношений
предметной области
НФ Бойса-Кодда
Номер корта Время начала Время окончания Тариф
1 09:30 10:30 «Корт 1 для членов клуба»
1 11:00 12:00 «Корт 1 для членов клуба»
1 14:00 15:30 «Корт 1 для не членов клуба»
2 10:00 11:30 «Корт 2 для не членов клуба»
2 11:30 13:30 «Корт 2 для не членов клуба»
2 15:00 16:30 «Корт 2 для членов клуба»
Потенциальные ключи
Номер корта, время начала
Номер корта, время окончания
Тариф, время начала
Тариф, время окончания
НФ Бойса-Кодда
Номер корта Время начала Время окончания Тариф
1 09:30 10:30 «Корт 1 для членов клуба»
1 11:00 12:00 «Корт 1 для членов клуба»
1 14:00 15:30 «Корт 1 для не членов клуба»
2 10:00 11:30 «Корт 2 для не членов клуба»
2 11:30 13:30 «Корт 2 для не членов клуба»
2 15:00 16:30 «Корт 2 для членов клуба»
Тариф Номер корта Для членов клуба
«Корт 1 для членов клуба» 1 Да
«Корт 1 для не членов клуба» 1 Нет
«Корт 2 для членов клуба» 2 Да
«Корт 2 для не членов клуба» 2 Нет
Тариф Время начала Время окончания
«Корт 1 для членов клуба» 09:30 10:30
«Корт 1 для членов клуба» 11:00 12:00
«Корт 1 для не членов клуба» 14:00 15:30
«Корт 2 для не членов клуба» 10:00 11:30
«Корт 2 для не членов клуба» 11:30 13:00
«Корт 2 для членов клуба» 15:00 16:30
Четвертая НФ
Отношение находится в НФ Б-К
В отношении есть только одна зависимость
многие-ко-многим
Нестрогое определение
Но позволяет избегать проблем
Четвертая НФ
Облегчаем запросы
Облегчаем обновление
Убираем дублирование
Выделяем новые таблицы
Улучшаем соответствие отношений
предметной области
Четвертая НФ
Товар Категория Поставщик
Пылесос Электротовары ООО "Электроника"
Пылесос Электротовары ЗЛО "Техника для дома"
Пылесос Бытовая техника ООфО "Электроника"
Пылесос Бытовая техника ЗАО "Техника для дома"
Планшет Компьютеры ООО "Компьютер и ты"
Планшет Компьютеры ООО "Электроника"
Товар Категория
Пылесос Электротовары
Пылесос Бытовая техника
Планшет Компьютеры
Товар Поставщик
Пылесос ООО "Электроника"
Пылесос ЗАО "Техника для дома"
Планшет ООО "Компьютер и ты"
Планшет ООО "Электроника"
Пятая НФ
Отношение находится в 4 НФ
В отношении есть только одна зависимость
многие-ко-многим
Нестрогое определение
Любую структуру можно привести к 5 НФ
Пятая НФ
Убираем неоднозначности в зависимости
Пятая НФ
Продавец Фирма Товар
Иванов Рога и Копыта Пылесос
Иванов Рога и Копыта Хлебница
Петров Безенчук&Ко Сучкорез
Петров Безенчук&Ко Пылесос
Петров Безенчук&Ко Хлебница
Петров Безенчук&Ко Зонт
Сидоров Безенчук&Ко Пылесос
Сидоров Безенчук&Ко Телескоп
Сидоров Рога и Копыта Пылесос
Сидоров Рога и Копыта Лампа
Сидоров Геркулес Вешалка
Продавец продает определенные товары
определенных фирм
Как это указать на уровне стр-ры бд?
Пятая НФ
Продавец Товар
Иванов Пылесос
Иванов Хлебница
Петров Сучкорез
Петров Пылесос
Петров Хлебница
Петров Зонт
Сидоров Телескоп
Сидоров Пылесос
Сидоров Лампа
Сидоров Вешалка
Продавец Фирма
Иванов Рога и Копыта
Петров Безенчук&Ко
Сидоров Безенчук&Ко
Сидоров Рога и Копыта
Сидоров Геркулес
Фирма Товар
Рога и Копыта Пылесос
Рога и Копыта Хлебница
Рога и Копыта Лампа
Безенчук&Ко Сучкорез
Безенчук&Ко Пылесос
Безенчук&Ко Хлебница
Безенчук&Ко Зонт
Безенчук&Ко Телескоп
Геркулес Вешалка
Доменно-ключевая НФ
Отношение находится в 5 НФ
Если в отношении нет аномалий модификации
Чтобы ни менялось, ничего не потеряется, если
соблюдены все ограничения ключей и типов
Нет формального способ привести к ДКНФ
Не любую структуру можно привести к ДКНФ
Шестая НФ
Не может быть декомпозирована дальше без
потерь
Если отношение в 6 НФ, то оно обязательно и в 5
НФ
Любую структуру можно привести к 6 НФ
Денормализация
Снижает нормальность структуры бд
Усложняет логику приложения – нужно
отслеживать дублирование
Ускоряет запросы
Часто делает бд более понятной для человека
Денормализация
Применяется когда запросы к бд тяжелые
Если много join
Если долго считаются агрегаты
Если длинные значения (BLOB)
Поддержка истории изменений
Выбор бд
Требования проекта
Архитектура
Функциональность
Требования организации и команды
Деньги
Разработчики
Поддержка
Выбор бд. Проект.
Производительность
Объем данных
Масштабируемость
Надежность (ACID vs BASE)
Гибкость
Безопасность
Выбор бд. Организация.
Бюджет
Навыки разработчиков
Скорость освоения
Наличие документации и сообщества
Популярность
Open source?
Выбор бд. Еще кое-что.
Насколько фиксирована структура ваших данных?
Планируете ли вы ORM?
Насколько технологии в вашей компании
унифицированы между командами/отделами?
Зоопарк = больше рисков
Выбор бд. Еще кое-что.
Как вы планируете обрабатывать ваши данные?
Много ли сложных отчетов? Много ли join?
Бд предагрегированных отчетов?
Облачные бд?
Поддержка. Любите ли вы DevOps?
Бэкапы. Не забудьте проводить учения.
Не забудьте посмотреть benchmarks.
Если у вас молодой стартап
или вы делаете MVP/PoC
Реляционная бд – лучший выбор почти всегда
Пока немного данных
Проста в использовании, поддержке
Просто обновлять код!
Легко найти разработчиков
Все равно вы все переделаете раз 100
Задача 1
Система, которая принимает участие в RTB
Конфигурация должна меняться через UI и
храниться в бд
1000 аукционов в секунду
5 типов ивентов
Оплата по ивентам показа
Задача 2
Предложите свою
Не менять постановку после озвучивания
Только уточнять
Постановка – 5 предложений
Ссылки
 https://club.shelek.ru/viewart.php?id=177
 https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D
1%84%D0%BE%D1%80%D0%BC%D0%B0
 https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D
1%84%D0%BE%D1%80%D0%BC%D0%B0_%D0%91%D0%BE%D0%B9%D1%81%D0%B0_%E2%80%94_%D0%9A%D0%BE%D
0%B4%D0%B4%D0%B0
 https://habr.com/ru/post/64524/
 https://habr.com/ru/company/latera/blog/281262/
 https://studfiles.net/preview/3707302/page:51/
Задайте мне вопрос

More Related Content

More from Pavel Veinik

Software craftsmanship 14 online Splitting the Monolith
Software craftsmanship 14 online Splitting the MonolithSoftware craftsmanship 14 online Splitting the Monolith
Software craftsmanship 14 online Splitting the MonolithPavel Veinik
 
Software craftsmanship 12 online highload systems
Software craftsmanship 12 online highload systemsSoftware craftsmanship 12 online highload systems
Software craftsmanship 12 online highload systemsPavel Veinik
 
Software craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship 11 online: мотивация и эффектисность разработчикаSoftware craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship 11 online: мотивация и эффектисность разработчикаPavel Veinik
 
Software craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакцииSoftware craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакцииPavel Veinik
 
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеSoftware craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеPavel Veinik
 
Software craftsmanship 8
Software craftsmanship 8Software craftsmanship 8
Software craftsmanship 8Pavel Veinik
 
Software craftsmanship 7
Software craftsmanship 7Software craftsmanship 7
Software craftsmanship 7Pavel Veinik
 
Software craftsmanship фиксит проблемы Agile
Software craftsmanship фиксит проблемы AgileSoftware craftsmanship фиксит проблемы Agile
Software craftsmanship фиксит проблемы AgilePavel Veinik
 
Software craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисыSoftware craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисыPavel Veinik
 
Software craftsmanship meetup #4
Software craftsmanship meetup #4Software craftsmanship meetup #4
Software craftsmanship meetup #4Pavel Veinik
 
Software craftsmanship 1
Software craftsmanship 1Software craftsmanship 1
Software craftsmanship 1Pavel Veinik
 
Software craftsmanship 2
Software craftsmanship 2Software craftsmanship 2
Software craftsmanship 2Pavel Veinik
 
Women in technology_week-women_leadership
Women in technology_week-women_leadershipWomen in technology_week-women_leadership
Women in technology_week-women_leadershipPavel Veinik
 
Программирование и лингвистика: как понять язык и извлечь знания из текстов
Программирование и лингвистика: как понять язык и извлечь знания из текстовПрограммирование и лингвистика: как понять язык и извлечь знания из текстов
Программирование и лингвистика: как понять язык и извлечь знания из текстовPavel Veinik
 
Человеческий фактор в разработке, или ORM на noSql через JPA.
Человеческий фактор в разработке, или ORM на noSql через JPA.Человеческий фактор в разработке, или ORM на noSql через JPA.
Человеческий фактор в разработке, или ORM на noSql через JPA.Pavel Veinik
 

More from Pavel Veinik (16)

Software craftsmanship 14 online Splitting the Monolith
Software craftsmanship 14 online Splitting the MonolithSoftware craftsmanship 14 online Splitting the Monolith
Software craftsmanship 14 online Splitting the Monolith
 
Software craftsmanship 12 online highload systems
Software craftsmanship 12 online highload systemsSoftware craftsmanship 12 online highload systems
Software craftsmanship 12 online highload systems
 
Software craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship 11 online: мотивация и эффектисность разработчикаSoftware craftsmanship 11 online: мотивация и эффектисность разработчика
Software craftsmanship 11 online: мотивация и эффектисность разработчика
 
Software craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакцииSoftware craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакции
 
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеSoftware craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
 
Software craftsmanship 8
Software craftsmanship 8Software craftsmanship 8
Software craftsmanship 8
 
Software craftsmanship 7
Software craftsmanship 7Software craftsmanship 7
Software craftsmanship 7
 
Software craftsmanship фиксит проблемы Agile
Software craftsmanship фиксит проблемы AgileSoftware craftsmanship фиксит проблемы Agile
Software craftsmanship фиксит проблемы Agile
 
Software craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисыSoftware craftsmanship #5 кэши и микросервисы
Software craftsmanship #5 кэши и микросервисы
 
Software craftsmanship meetup #4
Software craftsmanship meetup #4Software craftsmanship meetup #4
Software craftsmanship meetup #4
 
Software craftsmanship 1
Software craftsmanship 1Software craftsmanship 1
Software craftsmanship 1
 
Software craftsmanship 2
Software craftsmanship 2Software craftsmanship 2
Software craftsmanship 2
 
Women in technology_week-women_leadership
Women in technology_week-women_leadershipWomen in technology_week-women_leadership
Women in technology_week-women_leadership
 
Career day 2019
Career day 2019Career day 2019
Career day 2019
 
Программирование и лингвистика: как понять язык и извлечь знания из текстов
Программирование и лингвистика: как понять язык и извлечь знания из текстовПрограммирование и лингвистика: как понять язык и извлечь знания из текстов
Программирование и лингвистика: как понять язык и извлечь знания из текстов
 
Человеческий фактор в разработке, или ORM на noSql через JPA.
Человеческий фактор в разработке, или ORM на noSql через JPA.Человеческий фактор в разработке, или ORM на noSql через JPA.
Человеческий фактор в разработке, или ORM на noSql через JPA.
 

Software craftsmanship 3

  • 1. Software Craftsmanship meetup #3 Базы данных: обзор, нормализация, выбор Павел Вейник CTO @ Splitmetrics CEO @ Hard & Soft Skills
  • 2. Зачем митапы? Поделиться с разработчиками Splitmetrics Поделиться со всеми разработчиками Обкатать новый курс для техлидов Пообщаться
  • 3. Для кого митапы? Для разработчиков Для тестировщиков Для сочувствующих и интересующихся
  • 4. Нас сегодня много Зарегистрировались 102 человека, потом закрыли регистрацию Мы рады, но мало места Отправили отказы всем неразработчикам ( Подумаем как решать
  • 5. План митапов 1. Software Craftsmanship & Agile. Как не делать говно? 2. Принципы хранения данных 3. Обзор баз данных 4. Очереди сообщений 5. Кэши и файловые хранилища
  • 6. План этого митапа 1. Типы баз данных 2. Нормализация 3. Критерии выбора для проекта 4. Задачки на архитектуру
  • 7. Не план этого митапа microservices Distributed transactions Neo4j, Clickhouse, MySQL, CitusDB… Стоимость хостинга, DB as a Service Мы учтем эти темы позже, и найдем интересных спикеров по нюансам
  • 8. Типы баз данных Relational DBMS Document storage Key-value store Column-based store Time series DBMS Graph DBMS Object oriented RDF store Search engine XML DBMS Event stores Wide column store
  • 9. Сколько баз данных всего? Всего 343  db-engines.com
  • 10. Нормализация Способ организовать таблицы и поля в реляционной бд Для чего?
  • 11. Нормализация Правильно проектировать RDBMS Избегаем последствий: Неудобно писать запросы Дублирование данных Нарушение целостности данных Нарушение логики работы приложения
  • 12. Нормальные формы Первая НФ Вторая НФ Третья НФ НФ Бойса-Кодда Четвертая НФ Пятая НФ Доменно-ключевая НФ Шестая НФ
  • 13. Первая НФ Термины реляционной алгебры Не все ) Каждый атрибут (поле) отношения (таблицы) должен хранить только одно значение Не список Не кортеж
  • 14. Первая НФ Облегчаем запросы Облегчаем обновление Понятие атомарности (одно значение) неоднозначно ФИО – один атрибут или три?
  • 15. Первая НФ Наим. Город Адрес Эл. почта WWW Вид Конт. лица Поршневой з-д Владимир Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик Иванов И.И., зам. дир., тел (3254)76-15-95 Петров П.П., нач. отд. сбыта, тел (3254)76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент Сидоров С.С., директор, тел. (7634)66-65-38 ИЧП Альфа Владимир Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент Васильев В.В., директор, тел (3254)74-57-45 Наим. Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Код города Тел. Поршневой з- д Владимир Ул. 2-я Кольцевая, 17 info@plunger .ru www.plunger. ru Поставщик зам. дир. Иванов И.И. 3254 76-15-95 Поршневой з- д Владимир Ул. 2-я Кольцевая, 17 info@plunger .ru www.plunger. ru Поставщик нач. отд. сбыта Петров П.П., 3254 76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mai l.ru Клиент директор Сидоров С.С. 7634 66-65-38 ИЧП Альфа Владимир Ул. Пушкинская, 37, оф. 565 alpha323@lis t.ru Клиент директор Васильев В.В. 3254 74-57-45
  • 16. Вторая НФ Отношение находится в 1ой НФ Каждый неключевой атрибут полностью зависит от ключа целиком, а не от части ключа Понятие «зависит» включает в себя транзитивные зависимости Если ключ не составной, то 1НФ = 2НФ
  • 17. Вторая НФ Облегчаем запросы Облегчаем обновление Убираем дублирование данных (не всё) Выделяем новые таблицы
  • 18. Вторая НФ Наим. Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Тел. Поршневой з-д Владимир Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик зам. дир. Иванов И.И. 76-15-95 Поршневой з-д Владимир Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик нач. отд. сбыта Петров П.П., 76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент директор Сидоров С.С. 66-65-38 ИЧП Альфа Владимир Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент директор Васильев В.В. 74-57-45 Наим. Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Код города Тел. Поршневой з- д Владимир Ул. 2-я Кольцевая, 17 info@plunger .ru www.plunger. ru Поставщик зам. дир. Иванов И.И. 3254 76-15-95 Поршневой з- д Владимир Ул. 2-я Кольцевая, 17 info@plunger .ru www.plunger. ru Поставщик нач. отд. сбыта Петров П.П., 3254 76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mai l.ru Клиент директор Сидоров С.С. 7634 66-65-38 ИЧП Альфа Владимир Ул. Пушкинская, 37, оф. 565 alpha323@lis t.ru Клиент директор Васильев В.В. 3254 74-57-45 Город Код города Владимир 3254 Курск 7634
  • 19. Третья НФ Отношение находится в 2 НФ Атрибуты в отношении должны нетранзитивно зависеть от ключа
  • 20. Третья НФ Облегчаем запросы Облегчаем обновление Убираем дублирование данных (не всё) Выделяем новые таблицы Нарушения 3НФ – наиболее частые
  • 21. Третья НФ Наим. Город Адрес Эл. почта WWW Вид Поршневой з-д Владимир Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент ИЧП Альфа Владимир Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент Наим. Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Тел. Поршневой з-д Владимир Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик зам. дир. Иванов И.И. 76-15-95 Поршневой з-д Владимир Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик нач. отд. сбыта Петров П.П., 76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент директор Сидоров С.С. 66-65-38 ИЧП Альфа Владимир Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент директор Васильев В.В. 74-57-45 Наим. Город Ф.И.О. Должность Тел. Поршневой з-д Владимир Иванов И.И. зам. дир. 76-15-95 Поршневой з-д Владимир Петров П.П., нач. отд. сбыта 76-15-35 ООО Вымпел Курск Сидоров С.С. директор 66-65-38 ИЧП Альфа Владимир Васильев В.В. директор 74-57-45
  • 22. НФ Бойса-Кодда Отношение находится в 3 НФ Каждая зависимость атрибутов имеет в качестве главной части некоторый потенциальный ключ Потенциальный ключ – набор атрибутов, уникально и минимально определяющие кортеж (строку)
  • 23. НФ Бойса-Кодда Облегчаем запросы Облегчаем обновление Убираем дублирование Выделяем новые таблицы Улучшаем соответствие отношений предметной области
  • 24. НФ Бойса-Кодда Номер корта Время начала Время окончания Тариф 1 09:30 10:30 «Корт 1 для членов клуба» 1 11:00 12:00 «Корт 1 для членов клуба» 1 14:00 15:30 «Корт 1 для не членов клуба» 2 10:00 11:30 «Корт 2 для не членов клуба» 2 11:30 13:30 «Корт 2 для не членов клуба» 2 15:00 16:30 «Корт 2 для членов клуба» Потенциальные ключи Номер корта, время начала Номер корта, время окончания Тариф, время начала Тариф, время окончания
  • 25. НФ Бойса-Кодда Номер корта Время начала Время окончания Тариф 1 09:30 10:30 «Корт 1 для членов клуба» 1 11:00 12:00 «Корт 1 для членов клуба» 1 14:00 15:30 «Корт 1 для не членов клуба» 2 10:00 11:30 «Корт 2 для не членов клуба» 2 11:30 13:30 «Корт 2 для не членов клуба» 2 15:00 16:30 «Корт 2 для членов клуба» Тариф Номер корта Для членов клуба «Корт 1 для членов клуба» 1 Да «Корт 1 для не членов клуба» 1 Нет «Корт 2 для членов клуба» 2 Да «Корт 2 для не членов клуба» 2 Нет Тариф Время начала Время окончания «Корт 1 для членов клуба» 09:30 10:30 «Корт 1 для членов клуба» 11:00 12:00 «Корт 1 для не членов клуба» 14:00 15:30 «Корт 2 для не членов клуба» 10:00 11:30 «Корт 2 для не членов клуба» 11:30 13:00 «Корт 2 для членов клуба» 15:00 16:30
  • 26. Четвертая НФ Отношение находится в НФ Б-К В отношении есть только одна зависимость многие-ко-многим Нестрогое определение Но позволяет избегать проблем
  • 27. Четвертая НФ Облегчаем запросы Облегчаем обновление Убираем дублирование Выделяем новые таблицы Улучшаем соответствие отношений предметной области
  • 28. Четвертая НФ Товар Категория Поставщик Пылесос Электротовары ООО "Электроника" Пылесос Электротовары ЗЛО "Техника для дома" Пылесос Бытовая техника ООфО "Электроника" Пылесос Бытовая техника ЗАО "Техника для дома" Планшет Компьютеры ООО "Компьютер и ты" Планшет Компьютеры ООО "Электроника" Товар Категория Пылесос Электротовары Пылесос Бытовая техника Планшет Компьютеры Товар Поставщик Пылесос ООО "Электроника" Пылесос ЗАО "Техника для дома" Планшет ООО "Компьютер и ты" Планшет ООО "Электроника"
  • 29. Пятая НФ Отношение находится в 4 НФ В отношении есть только одна зависимость многие-ко-многим Нестрогое определение Любую структуру можно привести к 5 НФ
  • 31. Пятая НФ Продавец Фирма Товар Иванов Рога и Копыта Пылесос Иванов Рога и Копыта Хлебница Петров Безенчук&Ко Сучкорез Петров Безенчук&Ко Пылесос Петров Безенчук&Ко Хлебница Петров Безенчук&Ко Зонт Сидоров Безенчук&Ко Пылесос Сидоров Безенчук&Ко Телескоп Сидоров Рога и Копыта Пылесос Сидоров Рога и Копыта Лампа Сидоров Геркулес Вешалка Продавец продает определенные товары определенных фирм Как это указать на уровне стр-ры бд?
  • 32. Пятая НФ Продавец Товар Иванов Пылесос Иванов Хлебница Петров Сучкорез Петров Пылесос Петров Хлебница Петров Зонт Сидоров Телескоп Сидоров Пылесос Сидоров Лампа Сидоров Вешалка Продавец Фирма Иванов Рога и Копыта Петров Безенчук&Ко Сидоров Безенчук&Ко Сидоров Рога и Копыта Сидоров Геркулес Фирма Товар Рога и Копыта Пылесос Рога и Копыта Хлебница Рога и Копыта Лампа Безенчук&Ко Сучкорез Безенчук&Ко Пылесос Безенчук&Ко Хлебница Безенчук&Ко Зонт Безенчук&Ко Телескоп Геркулес Вешалка
  • 33. Доменно-ключевая НФ Отношение находится в 5 НФ Если в отношении нет аномалий модификации Чтобы ни менялось, ничего не потеряется, если соблюдены все ограничения ключей и типов Нет формального способ привести к ДКНФ Не любую структуру можно привести к ДКНФ
  • 34. Шестая НФ Не может быть декомпозирована дальше без потерь Если отношение в 6 НФ, то оно обязательно и в 5 НФ Любую структуру можно привести к 6 НФ
  • 35. Денормализация Снижает нормальность структуры бд Усложняет логику приложения – нужно отслеживать дублирование Ускоряет запросы Часто делает бд более понятной для человека
  • 36. Денормализация Применяется когда запросы к бд тяжелые Если много join Если долго считаются агрегаты Если длинные значения (BLOB) Поддержка истории изменений
  • 37. Выбор бд Требования проекта Архитектура Функциональность Требования организации и команды Деньги Разработчики Поддержка
  • 38. Выбор бд. Проект. Производительность Объем данных Масштабируемость Надежность (ACID vs BASE) Гибкость Безопасность
  • 39. Выбор бд. Организация. Бюджет Навыки разработчиков Скорость освоения Наличие документации и сообщества Популярность Open source?
  • 40. Выбор бд. Еще кое-что. Насколько фиксирована структура ваших данных? Планируете ли вы ORM? Насколько технологии в вашей компании унифицированы между командами/отделами? Зоопарк = больше рисков
  • 41. Выбор бд. Еще кое-что. Как вы планируете обрабатывать ваши данные? Много ли сложных отчетов? Много ли join? Бд предагрегированных отчетов? Облачные бд? Поддержка. Любите ли вы DevOps? Бэкапы. Не забудьте проводить учения. Не забудьте посмотреть benchmarks.
  • 42. Если у вас молодой стартап или вы делаете MVP/PoC Реляционная бд – лучший выбор почти всегда Пока немного данных Проста в использовании, поддержке Просто обновлять код! Легко найти разработчиков Все равно вы все переделаете раз 100
  • 43. Задача 1 Система, которая принимает участие в RTB Конфигурация должна меняться через UI и храниться в бд 1000 аукционов в секунду 5 типов ивентов Оплата по ивентам показа
  • 44. Задача 2 Предложите свою Не менять постановку после озвучивания Только уточнять Постановка – 5 предложений
  • 45. Ссылки  https://club.shelek.ru/viewart.php?id=177  https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D 1%84%D0%BE%D1%80%D0%BC%D0%B0  https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D 1%84%D0%BE%D1%80%D0%BC%D0%B0_%D0%91%D0%BE%D0%B9%D1%81%D0%B0_%E2%80%94_%D0%9A%D0%BE%D 0%B4%D0%B4%D0%B0  https://habr.com/ru/post/64524/  https://habr.com/ru/company/latera/blog/281262/  https://studfiles.net/preview/3707302/page:51/