17 авг. 2009 г.

Проектирование БД. Нормализация

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

1. Первая нормальная форма
• Каждый столбец в строке должен быть атомарным, т.е. столбец может содержать одно и только одно значение для заданной строки.
• Каждая строка в таблице должна содержать одинаковое количество столбцов. Учитывая обязательную атомарность столбцов, следует, что все строки в таблице должны иметь одинаковое количество значений.
• Все строки в таблице должны быть уникальны. Значения в столбцах могут дублироваться, но строки взятые целиком – не могут.

2. Вторая нормальная форма
• Таблица должна соответствовать первой нормальной форме.
• Все столбцы, не входящие в полный первичный ключ, должны зависеть от полного первичного ключа.
Пример. Имеется таблица о станциях метро с информацией об архитекторах.
archName archSurname Title comletedDate
Александр Андреев Площадь Ленина 1958.06.01
Александр Жук Достоевская 1991.05.20
В таблице первичным ключем объявлены поля archSurname (фамилия архитектора) и title (название станции). Если таблица следует нормальной форме, то все поля, не входящие в первичный ключ, зависят от него. Итак, смотрим: archName (имя архитектора) зависит от archSurname, и это логично. Поле completedDate (дата сдачи станции в эксплуатацию) зависит от title (от ее названия), это тоже логично. Но имя архитектора совершенно не зависит от названия станции, а дата сдачи станции, в свою очередь, никак не зависит от имени архитектора. Следовательно, два поля таблицы не зависят от соответственных полей в первичном ключе и таблица не соответствует второй нормальной форме.
Как мы решим проблему? Достаточно грамотный выход — раскидать данные по двум таблицам: Stations и Architectors. При этом нам понадобится третья, связующая таблица (что, плюс ко всему, позволит присваивать один проект нескольким архитекторам).

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

Комментариев нет:

Отправить комментарий