Нормалдаштыруу: 1NF, 2NF жана 3NF
Таблицаларды ар бир факт бир жолу, так бир жерде сакталгандай уюштуруңуз
- артыкбаштык жараткан үч аномалияны атай аласыз,
- функционалдык көз карандылыкты окуй аласыз, мисалы
order_id -> customer_id, - таблицаны 1NF абалына келтире аласыз (атомардык маанилер, кайталануучу топтор жок),
- курама ачкычтан жарым-жартылай көз карандылыктарды алып, 2NF жете аласыз,
- транзитивдик көз карандылыктарды алып, 3NF жете аласыз,
- денормалдаштыруу качан акылга сыярлык компромисс экенин чече аласыз.
1. Маселе: бир чоң таблица
Ар бир заказ сабын бир кенен таблицага жазган интернет-дүкөндү элестетиңиз. Бул ыңгайлуу сезилет - бардыгы бир жерде - бирок кардар жана товар жөнүндөгү бир эле маалыматтар көп саптарга көчүрүлөт.
| order_id | customer_name | customer_city | products | total |
|---|---|---|---|---|
| 1001 | Aida Sultanova | Bishkek | Keyboard, Mouse | 45.00 |
| 1002 | Aida Sultanova | Bishkek | Monitor | 150.00 |
| 1003 | Boris Ivanov | Osh | Mouse | 15.00 |
Aida Sultanova / Bishkek эки сапта пайда болгондуктан, жана products уячасы бир нече товарды бирге кысып салгандыктан, бул таблица үч классикалык аномалиядан жабыркайт:
- Жаңылоо аномалиясы: эгер Aida Osh шаарына көчсө, аны эскерген ар бир сапты табып өзгөртүшүңүз керек. Бирин өткөрүп жиберсеңиз - маалымат базасы аны бир эле убакта эки шаарда жашайт деп ырастайт.
- Киргизүү аномалиясы: азырынча эч нерсе заказ кылбаган жаңы кардарды жаза албайсыз, анткени жасалма заказ ойлоп таппай туруп аны коё турган сап жок.
- Өчүрүү аномалиясы: 1003 заказды өчүрсөңүз, Boris Ivanov жалпы бар экени жөнүндөгү жалгыз жазууну да өчүрөсүз.
Нормалдаштыруу ар бир реалдуу нерсеге - кардарга, товарга, заказга - өз таблицасын берүү менен бул аномалияларды жоёт, ошондо факт бир гана жолу жазылат.