Yuzlab yozuvlar yoki millionlab yozuvlarni ushlab turadigan ma'lumotlar bazasi bilan ishlaysizmi, to'g'ri ma'lumotlar bazasini yaratish har doim muhimdir. Ma'lumotni osonroq olishni emas, balki kelajakda ma'lumotlar bazasini kengaytirishni osonlashtiradi. Afsuski, kelajakda narsalarni qiyinlashtiradigan bir necha tuzoqqa tushish oson.
Ma'lumotlar bazasini normallashtirish mavzusida yozilgan barcha kitoblar mavjud, ammo agar siz bu keng tarqalgan xatolardan qochsangiz, yaxshi ma'lumotlar bazasini yaratish uchun to'g'ri yo'lda bo'lasiz.
Ma'lumotlar bazasi xatosi # 1: Maydonlarni jadvalda takrorlash
Yaxshi ma'lumotlar bazasi dizayni uchun asosiy qoidalar takrorlanuvchi ma'lumotni tanib olish va bu takrorlanadigan ustunlarni o'z stoliga qo'yishdir. Jadvaldagi takrorlangan maydonlar elektron jadvallar dunyosidan kelganlar uchun keng tarqalgan, ammo jadvallar dizayni tekis bo'lganda, ma'lumotlar bazalari o'zaro bog'liq bo'lishi kerak. Bu 2D dan 3D ga o'xshash.
Yaxshiyamki, takrorlanadigan joylar odatda aniqlanishi mumkin. Ushbu jadvalga bir qarang:
Buyurtma raqami | Mahsulot1 | Mahsulot2 | Mahsulot3 |
1 | Teddy Bears | Jelly Beans | |
2 | Jelly Beans |
Buyurtmada to'rtta mahsulot bo'lsa, nima bo'ladi? Uchdan ortiq mahsulotni qo'llab-quvvatlash uchun jadvalga yana bitta maydon kiritishimiz kerak. Agar biz ma'lumotni kiritishimizga yordam berish uchun jadval atrofida mijoz ilovasini yaratgan bo'lsak, uni yangi mahsulot sohasi bilan o'zgartirishimiz kerak bo'ladi. Jellybeans'lar bilan buyurtmalarning barchasini qanday topamiz? Jadvaldagi har bir mahsulot maydoniga so'rovlar berishga majbur bo'lamiz: SELECT * FROM PRODUCTS WHERE PRODUCT1 = 'Jelly Beans' OR Product2 = 'Jelly Beans' OR PRODUCT3 = 'Jelly Beans'.
Barcha ma'lumotlarni bir joyga to'playdigan yagona stolga ega bo'lishning o'rniga, biz uchta jadvalga ega bo'lishimiz kerak. Ushbu misolda Buyurtma stoli buyurtma haqida ma'lumot, barcha mahsulotlarimiz bilan Mahsulotlar jadvali va buyurtma mahsulotlarni bog'laydigan ProductOrders planshetini istaymiz.
Buyurtma raqami | CustomerID | Buyurtma sanasi | Jami |
1 | 7 | 1/24/17 | 19.99 |
2 | 9 | 1/25/17 | 24.99 |
ProductID | Mahsulot | Hisoblash |
1 | Teddy Bears | 1 |
2 | Jelly Beans | 100 |
ProductOrderID | ProductID | Buyurtma raqami |
101 | 1 | 1 |
102 | 2 | 1 |
Har bir jadvalning o'z noyob identifikatori bo'lgan maydonga qanday e'tibor bering. Bu asosiy kalit. Boshqa jadvaldagi chet el kalit sifatida asosiy kalit qiymatini ishlatib jadvallarni bog'laymiz. Birlamchi kalitlar va tashqi kalitlar haqida batafsil ma'lumot.
Ma'lumotlar bazasi xatosi # 2: Jadvalni jadvalga kiritish
Bu yana bir keng tarqalgan xatodir, lekin u doimo ko'p takrorlanadigan maydonlarni ajratib turmaydi. Ma'lumotlar bazasini yaratishda, jadvaldagi barcha ma'lumotlar o'z-o'ziga bog'liqligini tekshirishni xohlaysiz. Bu, bolalarning turli xil narsalarni aniqlash haqidagi o'yinlariga o'xshaydi. Agar sizda banan, qulupnay, shaftoli va televizor bo'lsa, televizor boshqa joylarga tegishli.
Xuddi shu yo'nalish bo'yicha, agar sizda sotuvlar jadvali mavjud bo'lsa, ushbu jadvaldagi barcha ma'lumotlar ushbu sotuvchiga tegishli bo'lishi kerak. Ushbu sotuvchiga noyob bo`lmagan har qanday qo'shimcha ma'lumotlar bazangizda bo`lishi mumkin.
SalesID | Birinchidan | Oxirgi | Manzil | Telefon raqami | Idora | OfficeNumber |
1 | Sam | Elliot | 118 Main St, Ostin, TX | (215) 555-5858 | Austin Downtown | (212) 421-2412 |
2 | Elis | Smit | 504 2nd Street, Nyu-York, NY | (211) 122-1821 | Nyu-York (Sharq) | (211) 855-4541 |
3 | Jou | Parish | 428 Aker Sit, Ostin, TX | (215) 545-5545 | Austin Downtown | (212) 421-2412 |
Ushbu jadval bir xil sotuvchi bilan bog'liq bo'lsa-da, aslida stolda joylashgan jadval mavjud. Office va OfficeNumber "Austin Downtown" bilan qanday takrorlanadi. Agar ofis telefon raqamlari o'zgartirilsa nima bo'ladi? Ma'lumotlarning bir qismini o'zgartirish uchun barcha ma'lumotlar to'plamini yangilashingiz kerak, bu hech qachon yaxshi narsa emas. Ushbu maydonlar o'z stoliga ko'chirilishi kerak.
SalesID | Birinchidan | Oxirgi | Manzil | Telefon raqami | OfficeID |
1 | Sam | Elliot | 118 Main St, Ostin, TX | (215) 555-5858 | 1 |
2 | Elis | Smit | 504 2nd Street, Nyu-York, NY | (211) 122-1821 | 2 |
3 | Jou | Parish | 428 Aker Sit, Ostin, TX | (215) 545-5545 | 1 |
OfficeID | Idora | OfficeNumber |
1 | Austin Downtown | (212) 421-2412 |
2 | Nyu-York (Sharq) | (211) 855-4541 |
Ushbu turdagi dizayn, shuningdek, Office masa-satrida qo'shimcha ma'lumotni sotuvchisi jadvalidagi taqqoslashni boshlamasdan, qo'shimcha ma'lumotni taqdim etish qobiliyatini beradi. Agar ushbu ma'lumotlarning barchasi savdo vakolatxonasi jadvalida bo'lsa, ko'cha manzili, shahar, davlat va pochta kodini kuzatib borish qanchalik ko'p ish bo'lishi mumkinligini tasavvur qiling!
Ma'lumotlar bazasi xatosi # 3: Ikki yoki undan ortiq ma'lumotni bitta maydonga qo'yish
Ofis ma'lumotlarini sotuvchining jadvaliga kiritish bu ma'lumotlar bazasidagi yagona muammo emas edi. Manzil maydoni uchta ma'lumotni o'z ichiga olgan: ko'cha manzili, shahar va davlat. Ma'lumotlar bazasidagi har bir maydon faqat bitta ma'lumot qismini o'z ichiga olishi kerak. Bitta sohada bir nechta ma'lumot bo'lganda, ma'lumotlar bazasini so'rov qilish qiyinlashishi mumkin.
Misol uchun, agar biz Austin shahridagi barcha sotuvchilarga so'rovni bajarishni xohlasak nima bo'lardi? Biz manzillar sohasida izlashimiz kerak, bu nafaqat samarasiz, balki yomon ma'lumotlarni qaytarishi mumkin. Axir, kimdir Portlend, Oregon shtati Ostin ko'chasida yashagan bo'lsa, nima bo'ladi?
Jadval quyidagicha bo'lishi kerak:
SalesID | Birinchidan | Oxirgi | 1 Manzil | Manzil2 | Shahar | Davlat | Zip | Telefon |
1 | Sam | Elliot | 118 ta asosiy ko'ch | Ostin | TX | 78720 | 2155555858 | |
2 | Elis | Smit | 504 2-chi st | Nyu York | NY | 10022 | 2111221821 | |
3 | Jou | Parish | 428 Aker Sit | Apt 304 | Ostin | TX | 78716 | 2155455545 |
Bu erda qayd qilish kerak bo'lgan bir nechta narsa bor. Birinchidan, "Address1" va "Address2" takrorlanadigan maydonlar xatosi ostida ko'rinadi.
Biroq, bu holatda ular o'zlarining jadvaliga kiritilishi kerak bo'lgan ma'lumotlarning takrorlanuvchi guruhidan ko'ra, bevosita savdo-sotiq bilan bog'liq bo'lgan alohida ma'lumotlarga taalluqlidirlar.
Bundan tashqari, oldini olish uchun bonus xatolik sifatida, telefon raqamini formatlash jadvaldan qanday chiqarilganligini ko'rib chiqing. Mumkin bo'lgan joylarda joylar formatini saqlashdan saqlanish kerak. Telefon raqamlari bo'lsa, odamlar telefon raqamini yozishning bir necha yo'li bor: 215-555-5858 yoki (215) 555-5858. Bu sotuvchini telefon raqami orqali qidirishni yoki bir xil hudud kodi bo'yicha sotuvchilarni qidirishni qiyinlashtiradi.
Ma'lumotlar bazasi xatosi # 4: to'g'ri kalit kalitini ishlatmaslik
Ko'pgina hollarda, siz avtomatik ravishda ko'paytiriladigan raqamni yoki boshqa ishlab chiqarilgan raqamni yoki sizning asosiy kalitingiz uchun alphanumericdan foydalanishni xohlaysiz. Yaxshi identifikatorni yaratishi mumkin bo'lganidek, asosiy kalitga oid biron bir ma'lumotni ishlatmaslik kerak.
Misol uchun, bizda har birimiz shaxsiy shaxsiy shaxsiy raqamimiz bor, shuning uchun xodimlarning ma'lumotlar bazasi uchun ijtimoiy xavfsizlik raqamini ishlatish yaxshi fikr kabi bo'lishi mumkin. Ammo kamdan-kam hollarda, hatto ijtimoiy xavfsizlik raqamini o'zgartirish ham mumkin va biz hech qachon asosiy kalitni o'zgartirishni xohlamaymiz.
Va bu haqiqiy axborotni asosiy qiymat sifatida ishlatish bilan bog'liq. U o'zgarishi mumkin.
Ma'lumotlar bazasi xatosi # 5: nomlash shartnomasini ishlatmaslik
Bu sizning ma'lumotlar bazasini yaratishga birinchi marta kirgandan keyin katta kelishuvga o'xshab qolmasligi mumkin, biroq ma'lumot olish uchun ma'lumotlar bazasiga qarshi so'rovlarni yozish nuqtasiga kirganingizdan so'ng, siz nomlangan nomlarni eslab qolsangiz, o'zgartiring qoidalariga ega bo'lasiz.
Nomlar Ismni, Familiyani bir jadvalda va first_name, last_name boshqa jadvalda saqlagan holda, bu jarayon qanchalik qiyinligini tasavvur qiling.
Ikki eng mashhur nomlash konventsiyalari - bu sohadagi har bir so'zning birinchi harfini katta harflar bilan ajratish yoki so'zlarni ajratish. Birinchi so'zdan tashqari, har bir so'zning birinchi harfini katta harflar bilan boshlash uchun ba'zi ishlab chiquvchilarni ko'rishingiz mumkin: firstName, lastName.
Bundan tashqari, siz bir nechta jadval nomlari yoki ko'plikli jadval nomlarini ishlatish to'g'risida qaror qabul qilishni xohlaysiz. Buyurtma jadvali yoki Buyurtma jadvali bormi? Xaridor jadvali yoki mijozlar jadvalimi? Shunga qaramay, siz Buyurtma stoli va mijozlar jadvaliga yopishib olishni xohlamaysiz.
O'zingiz tanlagan nomlangan konvensiya, nomini o'zgartirish to'g'risidagi konventsiyani tanlagan va yopish jarayoni kabi muhim emas.
Ma'lumotlar bazasi xatosi # 6: noto'g'ri indeksatsiya
Kataloglashtirish - bu, ayniqsa, ma'lumotlar bazasini yaratishda yangi bo'lganlar uchun to'g'ri keladigan eng og'ir narsalardan biri. Barcha asosiy kalitlar va tashqi kalitlar indekslangan bo'lishi kerak. Bog'lanish jadvallari shu bilan birga, shuning uchun indekssiz ma'lumotlar bazasidan juda yomon ishlashni ko'rasiz.
Lekin ko'pincha boshqa joylar soqit bo'ladi. Ular "WHERE" joylari. Agar siz tez-tez qidiradigan joyni WHERE so'zidan foydalanib, daraltmak istiyorsanız, bu sohada indeks qo'yish haqida o'ylashni xohlaysiz. Shu bilan birga, jadvalni haddan tashqari indekslashni xohlamaysiz.
Qanday qaror qabul qilish kerak? Bu ma'lumotlar bazasi dizayni sohasining bir qismi. Jadvalga qancha indeks qo'yish kerakligi haqida hech qanday cheklov yo'q. Avvalo, siz WHERE punktida tez-tez ishlatiladigan har qanday sohani indekslashni xohlaysiz. Ma'lumotlar bazasini to'g'ri moslashtirish haqida batafsil ma'lumot.