Приднестровская поддержка XOOPS
Для начала рассмотрим таблицу заказов (табл. 1).
Таблица 1. Заказы
Name | Address | City | Phone | Tovar | Date_orders | Price | Col | Sum |
Иванов Иван Иванович | Седова, 7 | Санкт-Петербург | 125-14-45 | HDD | 2007-06-20 | 3400 | 1 | 3400 |
Петров Сергей Николаевич | Невский, 88 | Санкт-Петербург | 312-12-51 | Тюнер | 2007-06-20 | 3100 | 1 | 3100 |
Иванов Иван Иванович | Седова, 7 | Санкт-Петербург | 125-14-45 | Монитор | 2007-06-25 | 7200 | 1 | 7200 |
Иванов Иван Иванович | Седова, 7 | Санкт-Петербург | 125-14-45 | Тюнер | 2007-06-30 | 3100 | 1 | 3100 |
Иванов Иван Иванович | Седова, 7 | Санкт-Петербург | 125-14-45 | CD диск | 2007-07-01 | 30 | 10 | 300 |
Иванов Иван Иванович | Седова, 7 | Санкт-Петербург | 125-14-45 | Сканер | 2007-07-01 | 6000 | 1 | 6000 |
Как видно из таблицы, господин Иванов Иван Иванович неоднократно делал покупки. Каждый раз в таблицу добавлялись его адрес, город и телефон. А теперь представьте себе ситуацию, когда господин Иванов Иван Иванович сменил номер телефона. Каждую запись о покупке пришлось бы изменить. Кроме того, имеет место напрасная трата пространства на жестком диске.
По этим причинам имеет смысл вынести данные о клиенте в отдельную таблицу (табл. 2).
Таблица 2. Данные о клиентах
id_Customer | Name | Address | City | Phone |
1 | Иванов Иван Иванович | Седова, 7 | Санкт-Петербург | 125-14-45 |
2 | Петров Сергей Николаевич | Невский, 88 | Санкт-Петербург | 312-12-51 |
Теперь наша первоначальная табл. 1 примет вид табл. 3.
Таблица 3. Заказы
id_Customer | Tovar | Date_orders | Price | Col | Sum |
1 | HDD | 2007-06-20 | 3400 | 1 | 3400 |
2 | Тюнер | 2007-06-20 | 3100 | 1 | 3100 |
1 | Монитор | 2007-06-25 | 7200 | 1 | 7200 |
1 | Тюнер | 2007-06-30 | 3100 | 1 | 3100 |
1 | CD диск | 2007-07-01 | 10 | 10 | 300 |
1 | Сканер | 2007-07-01 | 6000 | 1 | 6000 |
Поле id_Customer в табл. 2 называется первичным ключом и содержит только уникальные записи, то есть однозначно определяет строку в таблице. Поле id_Customer в табл. 3 называется внешним ключом и может содержать повторяющиеся записи.
Название города также можно вынести в отдельную таблицу (табл. 4).
Таблица 4. Названия городов
id_City | City |
1 | Санкт-Петербург |
2 | Москва |
В итоге табл. 2 примет вид табл. 5.
Таблица 5. Данные о клиентах
id_Customer | Name | Address | id_City | Phone |
1 | Иванов Иван Иванович | Седова, 7 1 | 1 | 125-14-45 |
2 | Петров Сергей Николаевич | Невский, 88 | 1 | 312-12-51 |
Теперь то же самое можно сделать с названиями товаров (табл. 6).
Таблица 6. Информация о товарах
id_Tovar | Tovar | Price |
1 | HDD | 3400 |
2 | Тюнер | 3100 |
3 | Монитор | 7200 |
4 | CD диск | 30 |
5 | Сканер | 6000 |
И табл. 1 еще уменьшится (табл. 7).
Таблица 7. Заказы
id_Customer | id_Tovar | Date_orders | Col | Sum |
1 | 1 | 2007-06-20 | 1 | 3400 |
2 | 2 | 2007-06-20 | 1 | 3100 |
1 | 3 | 2007-06-25 | 1 | 7200 |
1 | 2 | 2007-06-30 | 1 | 3100 |
1 | 4 | 2007-07-01 | 10 | 300 |
1 | 5 | 2007-07-01 | 1 | 6000 |
Но это еще не все. Создадим еще табл. 8, содержащую элементы заказа.
Таблица 8. Элементы заказа
id_Orders | id_Tovar | id_Tovar |
1 | 1 | 1 |
2 | 2 | 1 |
3 | 3 | 1 |
4 | 2 | 1 |
5 | 4 | 10 |
5 | 5 | 1 |
В итоге табл. 1 примет вид табл. 9.
Таблица 9. Таблица заказов после нормализации
id_Orders | id_Customer | Date_orders | Sum |
1 | 1 | 2007-06-20 | 3400 |
2 | 2 | 2007-06-20 | 3100 |
3 | 1 | 2007-06-25 | 7200 |
4 | 1 | 2007-06-30 | 3100 |
5 | 1 | 2007-07-01 | 6100 |
Такой процесс оптимизации базы данных называется нормализацией. Обратите внимание, в табл. 8 первичный ключ является составным (поля id_Orders и id_Tovar).
На первый взгляд может показаться проблематичным работать с такой базой данных. Но это не так. При изменении адреса или телефона покупателя достаточно изменить эти данные только в одной таблице. А отсутствие повторяющихся записей позволит снизить размер базы данных. О том, как получить данные сразу из нескольких таблиц, мы узнаем при изучении языка SQL. Но вначале следует изучить типы данных, которые могут храниться в полях таблицы.
Отправитель | Нити |
---|
1 пользователь(ей) активно (1 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 1 далее... |