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

Я думаю одна из причин, от абстрактных классов в основном отказались разработчики, могло бы быть недоразумение.

, Когда Банда Четыре записала:

Программа к интерфейсу не реализация.

не было такой вещи как интерфейс C# или Java. Они говорили об объектно-ориентированном интерфейсном понятии, что каждый класс имеет. Erich Gamma упоминает его в это интервью .

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

14
задан Steve Temple 19 October 2011 в 13:23
поделиться

5 ответов

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

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

15
ответ дан 1 December 2019 в 07:27
поделиться

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

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

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

10
ответ дан 1 December 2019 в 07:27
поделиться

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

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

4
ответ дан 1 December 2019 в 07:27
поделиться

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

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

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

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

1
ответ дан 1 December 2019 в 07:27
поделиться

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

Первую нормальную форму можно резюмировать следующим образом:

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

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

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

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

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

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

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

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


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

потенциальные проблемы.

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


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

потенциальные проблемы.

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


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

6
ответ дан 1 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: