Оглавление

2. Нормализация базы данных

Для начала рассмотрим таблицу заказов (табл. 1).

 

Таблица 1. Заказы

NameAddressCityPhoneTovarDate_ordersPriceColSum
Иванов Иван ИвановичСедова, 7Санкт-Петербург125-14-45HDD2007-06-20340013400
Петров Сергей НиколаевичНевский, 88Санкт-Петербург312-12-51Тюнер2007-06-20310013100
Иванов Иван ИвановичСедова, 7Санкт-Петербург125-14-45Монитор2007-06-25720017200
Иванов Иван ИвановичСедова, 7Санкт-Петербург125-14-45Тюнер2007-06-30310013100
Иванов Иван ИвановичСедова, 7Санкт-Петербург125-14-45CD диск
2007-07-013010300
Иванов Иван ИвановичСедова, 7Санкт-Петербург125-14-45Сканер2007-07-01600016000

 

 Как видно из таблицы, господин Иванов Иван Иванович неоднократно делал покупки.  Каждый  раз  в  таблицу  добавлялись  его  адрес,  город  и  телефон.  А теперь представьте себе ситуацию, когда господин Иванов Иван Иванович сменил  номер  телефона. Каждую  запись  о  покупке  пришлось  бы изменить. Кроме того, имеет место напрасная трата пространства на жестком диске.

 
По этим причинам имеет смысл вынести данные о клиенте в отдельную таблицу (табл. 2).

 

Таблица 2. Данные о клиентах

id_CustomerNameAddressCityPhone
1Иванов Иван ИвановичСедова, 7Санкт-Петербург125-14-45
2Петров Сергей НиколаевичНевский, 88Санкт-Петербург312-12-51

 

Теперь наша первоначальная табл. 1 примет вид табл. 3.

 

Таблица 3. Заказы

id_CustomerTovar                
Date_orders        
Price       
Col      
Sum      
1HDD2007-06-20340013400
2Тюнер2007-06-20310013100
1Монитор2007-06-25720017200
1Тюнер2007-06-30310013100
1CD диск
2007-07-011010300
1Сканер2007-07-01600016000

 

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

 
Название города также можно вынести в отдельную таблицу (табл. 4).

 

Таблица 4. Названия городов

id_CityCity                                                        
1Санкт-Петербург
2Москва

 

В итоге табл. 2 примет вид табл. 5.

 

Таблица 5. Данные о клиентах

id_CustomerName                                          
Addressid_CityPhone
1Иванов Иван ИвановичСедова, 7 11125-14-45
2Петров Сергей НиколаевичНевский, 881312-12-51

 

Теперь то же самое можно сделать с названиями товаров (табл. 6).

 

Таблица 6. Информация о товарах

id_TovarTovar                           
Price                            
1HDD3400
2Тюнер3100
3Монитор7200
4CD диск
30
5Сканер6000

 

И табл. 1 еще уменьшится (табл. 7).

 
Таблица 7. Заказы

id_Customerid_TovarDate_ordersColSum
112007-06-2013400
222007-06-2013100
132007-06-2517200
122007-06-3013100
142007-07-0110300
152007-07-0116000

 

Но это еще не все. Создадим еще табл. 8, содержащую элементы заказа.

 

Таблица 8. Элементы заказа

id_Ordersid_Tovarid_Tovar
111
221
331
421
5410
551

 

В итоге табл. 1 примет вид табл. 9.

 

Таблица 9. Таблица заказов после нормализации

id_Ordersid_CustomerDate_ordersSum
112007-06-203400
222007-06-203100
312007-06-257200
412007-06-303100
512007-07-016100

 

Такой процесс оптимизации базы данных называется нормализацией. Обратите внимание, в табл. 8 первичный ключ является составным (поля id_Orders и id_Tovar).

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

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити