|
Практична робота № 1.
Нормальні форми.
Мета роботи:
отримання|здобуття| практичних навичок|навиків| проектування баз даних за допомогою нормальних форм.
Постановка задачі.
Опис предметної області.
Фірма займається продажем деталей. Замовник звертається до службовця, який приймає замовлення. Після оплати замовлення виставляється рахунок-фактура.
Мінімальний набір атрибутів:
OrderNo | унікальний порядковий номер замовлення |
CustomerNo | номер замовника (клієнта) |
CustomerName | найменування фірми-замовника |
CustomerAddress | адреса фірми-замовника (CustomerCity, CustomerState, CustomerZip) |
OrderDate | дата замовлення |
ItemsOrdered | замовлені товари |
Total | сума замовлення |
Підготовка до процесу нормалізації:
1. Вибір первинного ключа. Кожне замовлення має унікальний порядковий номер, тому використовуватимемо НОМЕР ЗАМОВЛЕННЯ (OrderNo) як стовпець первинного ключа.
2. До сутності ЗАМОВЛЕННЯ не висуваються вимоги, що стосуються впорядкування стовбців і рядків. Зручно розташовувати стовпець (стовпці) первинного ключа на 1-у місці.
Представимо дані, що містяться в замовленнях, у вигляді плоского файлу.
Номер заказа
| Дата заказа
| Номер заказчика | Название фирмы заказчика | Адрес фирмы | Товары |
OrderNo | OrderDate | CustomerNo | CustomerName | Customer Address | ItemsOrdered |
1/1/11 | Компания1 | Гор1, ул.1,д.1 | 1-NP01, Деталь1, $15, $75, 7; 4-NP02, Деталь2, $27, $108, 5; 4-NP03, Деталь2, $29, $116, 5, 63; 1-NP04, Деталь_3, $750, $750, 63 | ||
1/1/11 | Компания2 | Гор2, ул.2,д.2 | 1-NP05, Деталь_4, $62.50, $62.50, 5 | ||
1/1/11 | Компания3 | Гор3, ул.3,д.3 | 7-NP06; Деталь_5, $12, $84, 3; 1-NP07, Деталь_5, $15, $32, 3; 1-NP08, Деталь_6, $32, $32 | ||
1/2/11 | Компания1 | Гор1, ул.1,д.1 | 40- NP06, Деталь_5, $12, $480, 3; 1-NP09, Деталь_7, $165, $165, 1; 1-NP05, Деталь_8, $42, $42, 5 |
Процес нормалізації.
Перша нормальна форма (1NF)
Вимоги першої нормальна форми:
1. На перетині рядка і стовпця повинне знаходилося єдине значення.
2. В таблиці не повинно бути груп даних, що повторюються.
Для зручності почнемо аналіз з 2-го пункту.
Порушення 1NF пункт 2.
В початковій сутності інформація о замовниках представляє групу даних одного виду, яка повторюється. Винесемо її в окрему таблицю.
ЗАМОВНИКИ (Customer)
Номер заказчика | Название фирмы заказчика | Адрес фирмы |
CustomerNo | CustomerName | Customer Address |
Компания1 | Гор1, ул.1,д.1 | |
Компания2 | Гор2, ул.2,д.2 | |
Компания3 | Гор3, ул.3,д.3 |
Порушення 1NF пункт1.
Стовпець ЗАМОВЛЕНІ ТОВАРИ (ItemsOrdered) містить дані, які по своєму характеру можуть бути розділені.
Номер заказа (РК) | Дата заказа | Номер заказчика | Номер партии деталей | Описание | Кол. Qty | Цена за ед. Unit Price | Общая цена Total Price | Вес Wt. |
1/1/1999 | NP01 | Деталь_1 | ||||||
1/1/1999 | NP02 | Деталь_2 | ||||||
1/1/1999 | NP03 | Деталь_2 | ||||||
1/1/1999 | NP04 | Деталь_3 | ||||||
1/1/1999 | NP05 | Деталь_4 | 62.50 | 62 50 | ||||
1/1/1999 | NP06 | Деталь_5 | ||||||
1/1/1999 | NP07 | Деталь_5 | ||||||
1/1/1999 | NP08 | Деталь_6 | ||||||
1/2/1999 | NP06 | Деталь_5 | ||||||
1/2/1999 | NP09 | Деталь_7 | ||||||
1/2/1999 | NP05 | Деталь_8 |
Первинний ключ більше не може служити унікальним ідентифікатором для рядків: його значення в деяких рядках повторюються. Введемо стовпець "Порядковий номер в замовленні".
ЗАМОВЛЕННЯ (Orders)
Номер заказа (РК) | Порядковый номер в заказе (PK) | Дата заказа | Номер заказчика | Номер партии деталей | Описание | Кол. Qty | Цена за ед. Unit Price | Общая цена Total Price | Вес Wt. |
1/1/1999 | NP01 | Деталь_1 | |||||||
1/1/1999 | NP02 | Деталь_2 | |||||||
1/1/1999 | NP03 | Деталь_2 | |||||||
1/1/1999 | NP04 | Деталь_3 | |||||||
1/1/1999 | NP05 | Деталь_4 | 62.50 | 62.50 | |||||
1/1/1999 | NP06 | Деталь_5 | |||||||
1/1/1999 | NP07 | Деталь_5 | |||||||
1/1/1999 | NP08 | Деталь_6 | |||||||
1/2/1999 | NP06 | Деталь_5 | |||||||
1/2/1999 | NP09 | Деталь_7 | |||||||
1/2/1999 | NP05 | Деталь_8 |
Друга нормальна форма (2NF)
1. Таблиця повинна відповідати 1NF.
2. Кожен стовпець повинен залежати від усього первинного ключа.
Порушення 2NF.
Значення в стовпцях ДАТА_ЗАМОВЛЕННЯ (OrderDate) і НОМЕР_ЗАМОВНИКА (CustomerNo) залежать тільки від частини первинного ключа – стовпця НОМЕР_ЗАМОВЛЕННЯ, а не від стовпця ПОРЯДКОВИЙ_НОМЕР_В_ЗАМОВЛЕННІ (Line Item).
Для усунення проблеми зробимо декомпозицію.
ЗАМОВЛЕННЯ_РОЗШИФРОВКА (OrderDetails).
Номер заказа (РК) | Порядковый номер в заказе (PK) | Номер партии деталей | Описание | Кол. Qty | Цена за ед. Unit Price | Общая цена Total Price | Вес Wt. |
NP01 | Деталь_1 | ||||||
NP02 | Деталь_2 | ||||||
NP03 | Деталь_2 | ||||||
NP04 | Деталь_3 | ||||||
NP05 | Деталь_4 | 62.50 | 62 50 | ||||
NP06 | Деталь_5 | ||||||
NP07 | Деталь_5 | ||||||
NP08 | Деталь_6 | ||||||
NP06 | Деталь_5 | ||||||
NP09 | Деталь_7 | ||||||
NP05 | Деталь_8 |
ЗАМОВЛЕННЯ
Номер заказа | Дата заказа | Номер заказчика |
OrderNo | OrderDate | CustomerNo |
1/1/11 | ||
1/1/11 | ||
1/1/11 | ||
1/2/11 |
Висновки.
Умови 2НФ - виконані: усі стовпці залежать від усього первинного ключа.
Третя нормальна форма (3NF)
1. Таблиця повинна відповідати вимогам 2NF.
2. Жоден неключовий стовпець не повинен залежати от іншого неключового стовпця.
3. Наявність в таблиці даних, які можна отримати на підставі інших стовпців не допускається.
Порушення 2 пункту вимог 3NF.
У таблиці ЗАМОВЛЕННЯ_РОЗШИФРОВКА (OrderDetails) від стовпця PartNo повністю залежать стовпці Weight (Вес) і Description (Опис), тому необхідно знову виконати розбиття однієї таблиці дві.
ТОВАРИ
Номер партии деталей | Описание | Вес |
NP01 | Деталь_1 | |
NP02 | Деталь_2 | |
NP03 | Деталь_2 | |
NP04 | Деталь_3 | |
NP05 | Деталь_4 | |
NP06 | Деталь_5 | |
NP07 | Деталь_5 | |
NP08 | Деталь_6 | |
NP06 | Деталь_5 | |
NP09 | Деталь_7 | |
NP05 | Деталь_8 |
Стовпець ЦІНА_ОДИНИЦІ (UnitPrice) залишається в таблиці ЗАМОВЛЕННЯ_РОЗШИФРОВКА т.я.:
1. Ціна товару в момент продажу може зміниться оскільки можуть бути запропоновані знижки.
2. Ціна товару може змінюватися з часом під дією таких чинників, як інфляція. Але майбутні зміни цін не повинні впливати на те, які ціни були вказані в замовлення у минулому.
Стовпець НОМЕР_ПАРТІЇ (PartNo) в т. ЗАМОВЛЕННЯ_РОЗШИФРОВКА залишаємо для зв'язку двох таблиць. Такий ключ в таблиці ЗАМОВЛЕННЯ_РОЗШИФРОВКА називається зовнішнім.
ЗАМОВЛЕННЯ_РОЗШИФРОВКА.
Номер заказа (РК) | Порядковый номер в заказе (PK) | Номер партии деталей | Кол. Qty | Цена за ед. Unit Price | Общая цена Total Price |
NP01 | |||||
NP02 | |||||
NP03 | |||||
NP04 | |||||
NP05 | 62.50 | 62.50 | |||
NP06 | |||||
NP07 | |||||
NP08 | |||||
NP06 | |||||
NP09 | |||||
NP05 |
Порушення 3NF пункт 3.
Стовпець ЗАГАЛЬНА_ЦІНА (TotalPrice) можна обчислити за допомогою стовпців ЦІНА ЗА ОД. (Unit Price) і КІЛЬКІСТЬ (Qty).
Вихід із ситуації – видалення стовпця.
Дата добавления: 2015-09-30; просмотров: 33 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
1-бап. Банк, оның мәртебесi және тұрған жерi 18 страница | | |