Подтвердить что ты не робот

Что именно делает нормализация базы данных?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

И третья нормальная форма идет немного дальше, поскольку каждый столбец, не являющийся частью ключа-кандидата, не должен зависеть от какого-либо другого столбца не-кандидата-ключа. Другими словами, это может зависеть только от ключей-кандидатов. Это приводит к утверждению, что 3NF зависит от ключа, всего ключа и всего лишь от ключа, поэтому помогите мне Codd 1.

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

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

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

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

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


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

Ответ 4

Мы используем нормировку, чтобы уменьшить вероятность аномалий, которые могут возникнуть в результате вставки, удаления, обновления. Нормализация не обязательно увеличивает производительность.

В Интернете много материала, поэтому я больше не буду повторять этот материал. Но вы можете взглянуть на Правила нормализации Anomalies  (другие также)

Ответ 5

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

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

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

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