Нормализация в основном необходима для устранения неоднозначностей при поиске данных в БД и для уменьшения общего размера БД – все это достигается благодаря соответствующему разложению данных по таблицам.
Основное правило, которое необходимо помнить - в базе данных нужно хранить только необходимую информацию, и при этом все данные должны храниться только в одном месте. Если пренебречь им, то могут возникнуть следующие проблемы:
База данных будет иметь больший размер, чем это необходимо. Причем иногда разница может быть в разы, что в конечном итоге скажется на производительности.
Повторяющиеся данные долго вводить и сложно анализировать, причем обычно еще и забиваются разные варианты одного и того же обозначения: сокращенные, полные, с пробелами в начале, в конце (Авт. Покрышка, Автопокрышка) – в зависимости от фантазии пользователей. При запросах и группировках такое значение будет рассматриваться как самостоятельное, и строка, содержащая его, не попадет в нужную группу или просто не будет выведена на экран.
Самый простой способ избежать подобных проблем – вывести повторяющиеся значения в отдельные таблицы (то есть создать справочники обозначений) и в основную таблицу вставлять код записи справочника. Затем связать их (код записи справочника и код обозначения в основной таблице) соотношением один ко многим (одна запись в справочнике и много соответствующих ей записей в основной таблице). Тем самым в базе данных будет только один вариант обозначения и хранится он будет в одном месте – в справочнике. А для удобства ввода кодов обозначений обычно делают поля со списками, где вставляемый код делают невидимым пользователю, а вместо него показывают в списке соответствующее коду обозначение, что создает иллюзию ввода обозначения в поле, хотя на самом деле туда попадает его код.
Код записи – это ее уникальный идентификатор в таблице. Часто его называют ключом записи. Ключи бывают внутренние (собственно сам уникальный идентификатор записи в таблице) и внешние (для связи с другими таблицами), причем во втором случае внутренний ключ главной таблицы должен совпадать по типу с внешним ключом связанной таблицы: текст – текст, число – число.
В качестве ключа можно принять например ФИО сотрудника (для таблицы «tab_Sotrudnik»), но лишь в случае, если в БД не будет однофамильцев. В противном случае надежнее использовать более уникальный идентификатор, например табельный номер, а еще надежнее ввести в таблицу так называемый «суррогатный ключ» – обычно это поле с типом данных «счетчик». Это числовое поле, которое автоматически генерирует значение при создании новой записи в таблице.