Ma'lumotlar bazasida yaratilgan keng tarqalgan xatolar

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.