Я думаю одна из причин, от абстрактных классов в основном отказались разработчики, могло бы быть недоразумение.
, Когда Банда Четыре записала:
Программа к интерфейсу не реализация.
не было такой вещи как интерфейс C# или Java. Они говорили об объектно-ориентированном интерфейсном понятии, что каждый класс имеет. Erich Gamma упоминает его в это интервью .
я думаю после всех правил, и принципы механически без взглядов приводит к трудному, чтобы считать, переместиться, понять и поддержать кодовую базу. Помните: самая простая вещь, которая могла возможно работать.
Основная причина состоит в том, чтобы исключить повторение данных, поэтому, например, если у вас был пользователь с несколькими адресами, и вы сохранили эту информацию в одной таблице, информация о пользователе будет дублироваться вместе с каждым адресом. вход. Нормализация будет разделять адреса в их собственную таблицу, а затем связывать их с помощью ключей. Таким образом, вам не нужно будет дублировать пользовательские данные, и ваша структура базы данных станет немного чище.
Полная нормализация, как правило, не улучшит производительность, на самом деле она часто может ухудшить ее, но она сохранит ваши дубликаты данных свободными. Фактически, в некоторых особых случаях я денормализовал некоторые конкретные данные, чтобы повысить производительность.
Нормализация происходит от математической концепции «нормальности». Другое слово было бы «перпендикулярно». Представьте себе обычную двухосную систему координат. Перемещение вверх просто изменяет координату y, перемещение в сторону просто меняет координату x. Таким образом, каждое движение можно разбить на движение в сторону и движение вверх-вниз. Эти два параметра не зависят друг от друга.
Нормализация в базе данных по существу означает одно и то же: если вы изменяете часть данных, предполагается, что это изменит только одну часть информации в базе данных. Представьте себе базу данных электронной почты: если вы храните идентификатор и имя получателя в таблице «Электронная почта», но таблица «Пользователи» также связывает имя с идентификатором, это означает, что если вы меняете имя пользователя, вы не только необходимо изменить его в таблице пользователей, но также и в каждом отдельном сообщении, с которым связан этот пользователь. Таким образом, ось «сообщение» и ось «пользователь» не являются «перпендикулярными» или «нормальными».
Если, с другой стороны, таблица «Почта» имеет только идентификатор пользователя, любое изменение имени пользователя будет автоматически применяться ко всем сообщениям, поскольку при извлечении сообщения вся информация о пользователе собирается из таблицы Users (посредством соединения).
Мы используем нормализацию, чтобы уменьшить вероятность аномалий, которые может возникнуть в результате вставки, удаления, обновления данных. Нормализация не обязательно увеличивает производительность.
В Интернете много материалов, поэтому я не буду повторять их здесь снова. Правила нормализации Аномалии (а также другие)
Как и все вышеперечисленное, в этом есть определенный смысл. Допустим, у вас есть пользователь, и вы хотите записать, какая у него машина.
Сложите все это в одну таблицу, и тогда все будет в порядке, пока у кого-то не появятся две машины ... Тогда вам понадобятся две строки для этого человека, и способ убедиться, что вы можете связать эти две строки вместе ...
А что, если вы также хотите записать, сколько у них собак? Один и тот же стол с множеством запутанных дубликатов? Еще одна таблица с вашей собственной логикой для управления уникальными пользователями?
Нормализация убережет вас от многих этих проблем ...
Нормализация базы данных - это, в простейшем случае, способ минимизировать избыточность данных. Для этого существуют определенные формы нормализации.
Первую нормальную форму можно резюмировать следующим образом:
Вторая нормальная форма добавляет еще одно ограничение, в основном то, что каждый столбец, не являющийся частью ключа-кандидата, должен зависеть от каждого ключа-кандидата (ключ-кандидат определяется как минимальный набор столбцов, который не может быть продублирован в таблице).
И третья нормальная форма идет немного дальше, в том , что каждый столбец, не являющийся частью ключа-кандидата, не должен зависеть от любого другого столбца, не являющегося ключом-кандидатом. Другими словами, он может зависеть только от ключей-кандидатов. Это приводит к высказыванию, что 3NF зависит от ключа, всего ключа и ничего, кроме ключа, поэтому помогите мне Кодд 1 .
Обратите внимание, что приведенные выше объяснения адаптированы к вашему вопросу, а не теоретикам баз данных , поэтому описания обязательно должны быть упрощены (и я использовал такие фразы, как «резюмировано как» и «в основном»).
Теория баз данных сложна и, если вы действительно хотите ее понять, вы в конце концов придется добраться до науки, стоящей за этим. Но с точки зрения вашего вопроса, надеюсь, этого будет достаточно.
Нормализация - ценный инструмент, гарантирующий отсутствие избыточных данных (что становится реальной проблемой, если две избыточные области не синхронизируются). Обычно это не увеличивает производительность.
Фактически, хотя вся база данных должна начинаться с 3NF, иногда допустимо понизиться до 2NF для увеличения производительности, если вы знаете о потенциальных проблемах и смягчаете их.
И имейте в виду, что есть также " более высокие "уровни нормализации, такие как (очевидно) четвертый, пятый и шестой, а также Бойс-Кодд и некоторые другие, которые я не могу вспомнить с головы до ног. В подавляющем большинстве случаев 3NF должно быть более чем достаточно.
1 Если вы не знаете, кто такой Эдгар Кодд (или Кристофер Дат, если на то пошло), вам, вероятно, следует изучить их, они отцы теории реляционных баз данных.
потенциальные проблемы.И имейте в виду, что есть также "более высокие" уровни нормализации, такие как (очевидно) четвертый, пятый и шестой, а также Бойс-Кодд и некоторые другие, которые я не могу вспомнить с головы до ног. . В подавляющем большинстве случаев 3NF должно быть более чем достаточно.
1 Если вы не знаете, кто такой Эдгар Кодд (или Кристофер Дат, если на то пошло), вам, вероятно, следует изучить их, они отцы теории реляционных баз данных.
потенциальные проблемы.И имейте в виду, что есть также "более высокие" уровни нормализации, такие как (очевидно) четвертый, пятый и шестой, а также Бойс-Кодд и некоторые другие, которые я не могу вспомнить с головы до ног. . В подавляющем большинстве случаев 3NF должно быть более чем достаточно.
1 Если вы не знаете, кто такой Эдгар Кодд (или Кристофер Дат, если на то пошло), вам, вероятно, следует изучить их, они отцы теории реляционных баз данных.