Вопрос по database-normalization, database – Что именно делает нормализация базы данных?
========================================================================================

Новое в базе данных и поэтому не расстраиваться с простыми вопросами.
Насколько нормализуются и собраны знания, нормализация снижает избыточность данных и повышает производительность. Но на самом деле я не понимаю, какая именно причина деления основной таблицы на другие небольшие таблицы, применения отношений между ними, извлечения данных с использованием всех возможных объединений, подзапросов, объединений и т. Д. Почему мы не можем получить все данные в одну таблицу и извлекать их по мере необходимости. Я немного растерялся.

угое слово будет "перпендикулярным". Представьте себе правильную двухосную систему координат. Перемещение вверх просто меняет координату y, перемещение в сторону просто меняет координату x. Таким образом, каждое движение может быть разбито на боковое и восходящее движение. Эти два независимы друг от друга.

Нормализация в базе данных, по сути, означает то же самое: если вы изменяете часть данных, это должно изменить только одну единицу информации в базе данных. Представьте себе базу данных E-Mail: если вы храните идентификатор и имя получателя в таблице Mails, но таблица Users также связывает имя с идентификатором, то есть если вы меняете имя пользователя, вы не только изменить его в таблице пользователей, а также в каждом сообщении, с которым связан этот пользователь. Итак, ось «сообщение» и ось "пользователь" не являются "перпендикулярными" или "нормальный".

Если, с другой стороны, в таблице «Почты» есть только идентификатор пользователя, любое изменение имени пользователя будет автоматически применяться ко всем сообщениям, потому что при получении сообщения вся информация о пользователе собирается из таблицы «Пользователи» (посредством присоединиться).



 это просто имеет определенный смысл. Скажем, у вас есть пользователь, и вы хотите записать, какая у него машина.

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

И что тогда, если вы также захотите записать, сколько у них собак? Одна и та же таблица с большим количеством путаниц? Еще одна таблица с вашей собственной логикой для управления уникальными пользователями?

Нормализация удерживает вас от многих из этих проблем ...



 в самом простом случае, способ минимизировать избыточность данных. Для этого существуют определенные формы нормализации.

Первая нормальная форма может быть обобщена как:

no repeating groups in single tables.
separate tables for related information.
all items in a table related to the primary key.
Вторая нормальная форма добавляет еще одно ограничение, в основном этоevery column not part of a candidate key must be dependent on every candidate key (ключ-кандидат определяется как минимальный набор столбцов, которые нельзя дублировать в таблице).

И третья нормальная форма идет немного дальше, в этомevery column not part of a candidate key must not be dependent on any other non-candidate-key column. Другими словами, это может зависетьonly на ключи кандидата. Это приводит к поговорке, что 3NF зависит от ключа, всего ключа и ничего, кроме ключа, поэтому помогите мне Codd1.

Обратите внимание, что приведенные выше объяснения предназначены для вашего вопроса, а не для теоретиков баз данных, поэтому описания обязательно будут упрощены (и я использовал фразы, такие как «кратко обозначенные как» и «в основном»).

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

Нормализация является ценным инструментом, гарантирующим, что у нас нет избыточных данных (что становится реальной проблемой, если две избыточные области не синхронизированы). Как правило, он не увеличивает производительность.

Фактически, хотя вся база данных должна начинаться с 3NF, иногда допустимо снижать ее до 2NF для повышения производительности, если вы знаете о потенциальных проблемах и смягчаете их.

И имейте в виду, что существуют также «более высокие» уровни нормализации, такие как (очевидно) четвертый, пятый и шестой, но также Бойс-Кодд и некоторые другие, которые я не могу вспомнить с макушки головы. В подавляющем большинстве случаев 3NF должно быть более чем достаточно.

1 Если вы не знаете, кто такой Эдгар Кодд (или Кристофер Дэйт, в этом отношении), вам, вероятно, следует исследовать их, ониfathers теории реляционных баз данных.



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

Полная нормализация, как правило, не улучшает производительность, на самом деле она часто может ухудшить ее, но при этом ваши данные останутся свободными. Фактически в некоторых особых случаях я денормализовал некоторые конкретные данные, чтобы получить повышение производительности.