Нормальные формы базы данных. Три нормальных формы, нормализация и денормализация БД

Нормальные формы базы данных. Три нормальных формы, нормализация и денормализация БД

Диджитализируй!

1 год назад

53,808 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

Igor Ruban
Igor Ruban - 12.09.2023 22:51

Вообще нормальных форм 6.
Не считая 3НФБК = 3,5

Ответить
Linda Smith
Linda Smith - 18.07.2023 17:36

Здорово! Спасибо! картинка очень приятная, все понятно, очень приятно слушать!

Ответить
Vladium Cvet
Vladium Cvet - 10.07.2023 19:08

Большое спасибо, пришлось самому учиться проектированию приложений и моделей данных для них. У Вас черпаю очень много полезной информации, спасибо большое за Ваш труд!

Ответить
RockStation
RockStation - 03.07.2023 22:19

Знающие подскажите, если идентификаторы зависит друг от друга то это 2НФ?(пример: в таблице клиенты 10 строк и в таблице заказы, заказы не могут превышать 10). Если таблице есть два идентификатора то это 3НФ?

Ответить
Rinat Yagafarov
Rinat Yagafarov - 28.06.2023 05:16

Thank you for video🔥🔥🔥

Ответить
Dmitriy Konopinskiy
Dmitriy Konopinskiy - 04.06.2023 06:52

"атрибуты - поля таблицы" поле - жто вроде ячейка, а не колонка, а атрибут - колонка/графа
3.40

Ответить
kolhozavr
kolhozavr - 25.04.2023 09:57

Что-то я не понял, как первичным ключом может быть owner_id в таблице телефонов, когда РК должен быть уникальным, а там он очевидно повторяется? (11 мин 15 сек)

Ответить
Devastator
Devastator - 22.03.2023 17:41

Спасибо огромное за внятное объяснение!!!

Ответить
Михаил Пастушков
Михаил Пастушков - 17.03.2023 19:53

спасибо!

Ответить
Vitaly Demchenko
Vitaly Demchenko - 16.03.2023 15:05

Спасибо за краткость и доходчивость. Все правильно. Важно понимать материал, а не зубрить его.

Ответить
Jackal
Jackal - 16.03.2023 05:29

Первичный ключ разве не должен быть уникален ? При разборе 2 НФ owner_id имеет два строки с одинаковым значение. Такое может быть ? Заранее благодарю за ответ!

Ответить
Gina
Gina - 13.03.2023 21:32

присоединюсь к другим комментариям, что хотелось бы видеть обьяснения других форм в таком же стиле)

Ответить
Gina
Gina - 13.03.2023 21:31

спасибо!
кратко и информативно)

Ответить
Murat
Murat - 27.02.2023 14:04

Спасибо

Ответить
O S
O S - 23.02.2023 17:27

Спасибо большое!

Ответить
Andrey Khalepov
Andrey Khalepov - 23.02.2023 02:08

Нормальная форма - это здравый смысл. Пытливый ум не увидет тут ответа на вопрос что такое нормализация баз данных. Нормализация делается для того чтобы не хранить в базе дублирующиеся данные. Если нам нужно хранить название операционной системы, то желательно хранить его в одной записи. А все остальные таблицы по хорошему должны иметь ссылку на эту запись. И таким образом все правила нормализации направлены именно на уменьшение размеров хранимых данных. Взглянув на таблицу можно сразу понять, нормализованные в ней данные хранятся или нет. Если мы видим повторяющиеся значения (например названия чего либо), то сразу можем сделать вывод, что данные не нормализованные.

Ответить
Andrey Khalepov
Andrey Khalepov - 23.02.2023 01:52

Вынос операционной системы в отдельную таблицу даёт нам уникальную запись операционной системы. И это относится к нормализации. И да, надо делать join. Но если оставить ОС в виде слова в каждой записи, как было предложено, то появляется ненормализованное хранение названия ОС. Представьте что завтра возникла необходимость переименовать ОС. Вам придётся изменить все записи, где используется эта ОС. Что очень не оптимально. Другое вопрос что в случае высокой нагрузки на чтение этих данных можно намеренно пойти на такую денормализацию, чтобы избежать join операций

Ответить
Green Storm
Green Storm - 20.02.2023 19:06

На основе прочитанных статей, книг у меня сложилось мнение о НФ, немного отличающееся от вашего:
1НФ - добавить то, что строки и столбцы неупорядочены. Не стоит ожидать, что при одном и том же SELECT-е порядок строк будет один и тот же.
2НФ - неключевые элементы могут зависеть или от первичного ключа (а если он составной, то ключа целиком) или от других неключевых элементов, которые в свою очередь прямо или опосредованно зависят от первичного ключа.
3НФ - строже, чем вторая: неключевые элементы могут зависеть только от первичного ключа.

Ответить
sashka sashka
sashka sashka - 17.02.2023 20:06

Леша, Лёха, Алексей! Опять добро делаешь! Спасибо! Полезно и очень интересно смотреть такие видео!

Ответить
Кирилл Че
Кирилл Че - 16.02.2023 22:12

Забавно, как часто реализуют на практике быстрое удаление данных из базы - реально не удаляются, а индексами помечаются как удаленные

Ответить
Sergey Rudyshin
Sergey Rudyshin - 16.02.2023 19:21

индексы - это не денормализация
и реляционная модель нечего не говорит про них
по этому же принципу хранение в кэше (в памяти) и в кэшах процессора тоже не денормализация
хотя дублирование есть

про атомарность тоже неправильно
два телефона в одном поле вполне допустимо
все зависит от смысла который вкладывается
по сути телефон в данном случае некий комментарий
но в том смысле, в котором эти телефоны используются дальше в примерах
разбиение точно имеет смысл

phone1, phone2 - также допустимо и не нарушает первую нормальную форму
это возможно коробит взгляд
но формально не нарушает

по поводу двух таблиц с суррогатными идентификаторами
тут опять заблуждение
строго говоря реляционная модель ничего не знает про физическое хранение данных
таблицы могут храниться физически "сджойненными"
и написав запрос с join "физически" его не будет

Ответить
Гриша Чёрный
Гриша Чёрный - 16.02.2023 11:48

Офигеть ❤ доступным языком объяснил, спасибо

Ответить
Аноним Анонимный
Аноним Анонимный - 16.02.2023 11:44

Такой вопрос:

Рассмотрим в примере второй нормальной формы уже после декомпозиции таблицу справа со столбцами (owner_id, phone). Разве она не противоречит второй нормальной форме? В этой таблице же нет первичного ключа.

Ответить
Black Mass
Black Mass - 15.02.2023 22:15

Прикольно 😊
Очень просто и понятно. Спасибо за объяснение. Пришёл ко всему этому собственным опытом, но здесь всё объяснено словами и почему-то не приходило в голову, что по БД есть теория и систематизация. Надо будет почитать 😅

Ответить
Николай Хрипунов
Николай Хрипунов - 15.02.2023 17:18

Не стало яснее...

Ответить
Pokruk
Pokruk - 15.02.2023 16:57

Как всегда замечательно, объяснил на примере за 15 минут то, что до нас препод за целый курс не донёс

Ответить
Verh010m
Verh010m - 15.02.2023 09:05

По первой нормальной форме. Я бы вынес названия осей в отдельную таблицу. Нас когда учили, были 90е-начало 2000х. У нас как раз начинали угорать по всяким переименованиям улиц-сел-городов-оргпгизаций и тому подобное. Так вот, препод говорил, что прикинь, если ты китаец, тебя 2 миллиарда, в стране миллион населенных пунктов... Что будет если правительство решит переименовать все населенные пункты? Всегда надо брать наихудший вариант развития событий. Так вот, что проще: поменять содержимое миллиона записей в таблице с названиями городов-сел-поселков, или менять содержимое 2 миллиардов записей? Лучше подумать 5 лишних минут над джойном, чем потом рвать пятую точку с изменениями данных

Ответить
Максим Иванов
Максим Иванов - 15.02.2023 08:17

Здравствуйте! А ваш курс на Stepik больше недоступен? На него можно как-то записаться или нужно ждать обновлённую версию?

Ответить
denis maleev
denis maleev - 14.02.2023 19:35

а зачем вообще джойнить в примере с вынесением в таблицу операционной системы? подменяя на ref id мы подменяем значение ios и назавние любоей другой ос на int которым оперируем на протяжении всего жизненного цикла

Ответить
Moneo
Moneo - 14.02.2023 14:13

Все так, только если все равно нужно будет джоинить лучше джоинить по serial id и его указывать внешним ключом, а не текстовые данные тем самым сократив размер базы и время джоина

Ответить
Максим
Максим - 13.02.2023 22:32

Есть IDE с названием Pydroid, это один из множества примеров почему Пайтон лучше не называть Питоном

Ответить
Валерий
Валерий - 13.02.2023 12:59

Алексей, в третьей нормальной форме в таблице phone, os не хватает телефона Samsung s22.

Ответить
Nikita Eshkeev
Nikita Eshkeev - 13.02.2023 12:17

1. Должны быть первичные ключи
2. Должны быть внешние ключи
3. Нельзя хранить агрегаты в таблицах

Дальше здравый смысл должен работать

Ответить
Winston Wolf
Winston Wolf - 13.02.2023 12:07

Наконец-то серьёзные темы пошли (без сарказма) 😊

Ответить
Дмитрий Никифорцев
Дмитрий Никифорцев - 13.02.2023 10:15

Ох... Вот "войти в ит" наслушаются и потом на "голубом глазу" на собесах рассказывают, что индексы хранят в себе данные 🤦‍♀️

Ответить
Vaso python
Vaso python - 13.02.2023 01:40

super

Ответить
Gnom Pirogov
Gnom Pirogov - 13.02.2023 01:24

Спасибо. Присоединяюсь к продолжению разговора о других формах и табличках

Ответить
Александр Киселёв
Александр Киселёв - 12.02.2023 21:59

Грамотно объясняете, спасибо!

Ответить
Guite RenzOg
Guite RenzOg - 12.02.2023 20:41

Я правильно понимаю, что не является нормализацией именно разбиение 1-ой нормальной формы на 2 таблицы, но разбиение в исходном варианте, когда таблица была некорректной (телефоны через запятую), является нормализацией?

То есть и то, и то НФ, но разбиение таблицы - изменение структуры уже нормальной формы?

Ответить
Stanislav Polyakovski
Stanislav Polyakovski - 12.02.2023 19:55

А куда делся Samsung S22 после приведения 3-й формы?

Ответить
Serg Mirny
Serg Mirny - 12.02.2023 19:46

Ммм, вы перешли на Нойман (я про микрофон) 💪 моё почтение. Тогда уже добавьте к нему ламповый предвак, а потом уже на карту, ну что б совсем сладкий звук был 👍

Ответить
Hoopengo
Hoopengo - 12.02.2023 17:57

не понял отличия 2-ой формы и 3-й, если честно

Ответить
Schmoopie Grob
Schmoopie Grob - 12.02.2023 17:05

А на счёт что лучше использовать в сервисе доставки или такси например, пара таблиц со множеством данных или много таблиц но распределить все данные? Люди с опытом можете подсказать?

Ответить
Кот Степан
Кот Степан - 12.02.2023 16:41

2 и 3 формы не понял

Ответить
user-fz9yz3et7y
user-fz9yz3et7y - 12.02.2023 15:58

По моему, примеры таблиц не очень удачные. Иначе получается, для добавления ОС, нужно сначала добавить телефон. Голый SQL он конечно занятный, но для нормальной работы всё таки хочется всегда сверху иметь какую нибудь предметно ориентированную модель в виде контактов, лидов, сделок, а не таблиц.

Ответить
Roman
Roman - 12.02.2023 15:47

Когда там рум тур?)

Ответить