Dažniausios klaidos, padarytos atliekant duomenų bazių kūrimą

Nesvarbu, ar dirbate su duomenų baze, kurioje saugomi šimtai įrašų ar milijonų įrašų, tinkamas duomenų bazių projektavimas visuomet yra svarbus. Tai ne tik padės daug lengviau susipažinti su informacija, bet ir ateityje supaprastins duomenų bazės išplėtimą. Deja, nesunku patekti į keletą gaudyklių, dėl kurių ateityje sunku susidurti.

Yra išsamių knygų, kurios yra parašytos dėl duomenų bazės normalizavimo, tačiau, jei paprasčiausiai išvengsite šių bendrų klaidų, būsite tinkamai pasiruošę geram duomenų bazių projektui.

Duomenų bazės klaida # 1: pakartotiniai laukai lentelėje

Geriausia duomenų bazės dizaino pagrindinė taisyklė - atpažinti pakartotinius duomenis ir įtraukti tuos kartojančius stulpelius į savo lentelę. Lentelių kartotiniai laukai yra bendri tiems, kurie atvyko iš skaičiuoklių pasaulio, tačiau, nors skaičiuoklės paprastai būna plokščios pagal dizainą, duomenų bazės turėtų būti reliacinės. Tai panašu į 2D į 3D.

Laimei, pasikartojantys laukeliai paprastai yra lengvai pastebimi. Tiesiog pažvelk į šią lentelę:

OrderID Produktas1 Produktas2 Produktas3
1 Teddy meškiukai Guminukai
2 Guminukai

Kas atsitinka, kai užsakyme yra keturi produktai? Norėdami pridėti daugiau nei tris produktus, turėtume pridėti dar vieną lauką prie lentelės. Jei mes sukūrėme kliento programą aplink stalą, kad padėtume mums įvesti duomenis, galbūt turėsime ją pakeisti naudodami naują produkto lauką. Ir kaip mes galime rasti visus užsakymus su Jellybeans? Mes turime būti priversti užklausti kiekvieną gaminio lauką lentelėje su tokiu SQL užrašu, kuris gali atrodyti taip: SELECT * FROM PRODUCTS WHERE Product1 = 'Jelly Beans' ARBA Produktas2 = 'Jelly Beans' ARBA Produktas3 = 'Jelly Beans'.

Vietoj to, kad turėtume vieną lentelę, kurioje būtų visa informacija, turėtume turėti tris lenteles, kurių kiekviena turi atskirą informaciją. Šiame pavyzdyje norėtume, kad lentelėje "Užsakymai" būtų pateikiama informacija apie pačią tvarką, Produktų lentelė su visais mūsų produktais ir "ProductOrders" planšetinis kompiuteris, susietas su užsakymais.

OrderID Kliento ID Užsakymo data Iš viso
1 7 1/24/17 19.99
2 9 1/25/17 24.99
ProductID Produktas Grafas
1 Teddy meškiukai 1
2 Guminukai 100
ProductOrderID ProductID OrderID
101 1 1
102 2 1

Atkreipkite dėmesį, kaip kiekviena lentelė turi savo unikalų ID lauką. Tai yra pirminis raktas. Lentelės sujungiame naudodami pirminio rakto reikšmę kaip užsienio raktą kitoje lentelėje. Sužinokite daugiau apie pirminius raktus ir užsienio raktus.

Duomenų bazės klaida # 2: lentelės įtraukimas į lentelę

Tai dar viena dažniausia klaida, bet ji ne visada išsiskiria gana tiek pat, kiek pasikartojančių sričių. Kurdami duomenų bazę, jūs norite įsitikinti, kad visi duomenys lentelėje yra susiję su savimi. Tai lyg tas vaiko žaidimas apie pastebimą, kas yra kitokia. Jei turite bananą, braškę, persikų ir televizorių, televizorius tikriausiai priklauso kažkur kitur.

Panašiai, jei turite pardavimo žmonių lentelę, visa šioje lentelėje pateikta informacija turėtų būti susijusi būtent su šiuo pardavėju. Bet kokia papildoma informacija, kuri nėra unikali šiam pardavėjui, gali priklausyti kur nors kitur jūsų duomenų bazėje.

SalesID Pirmas Paskutinis Adresas Telefono numeris Biuras OfficeNumber
1 Samas Elliotas 118 Main St, Austin, TX (215) 555-5858 Austin Downtown (212) 421-2412
2 Alisa Kalvis 504 2nd Street, Niujorkas, NY (211) 122-1821 Niujorkas (rytai) (211) 855-4541
3 Joe Parapija 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

Nors ši lentelė gali atrodyti taip, kad ji yra susijusi su konkrečiu pardavėju, ji iš tikrųjų turi lentelę, įterptą į lentelę. Atkreipkite dėmesį, kaip "Office" ir "OfficeNumber" pakartoja "Austin Downtown". Ką daryti, jei keičiasi biuro telefono numeris? Jums reikės atnaujinti visą duomenų rinkinį vienam informacijos vienetui pakeisti, kuris niekada nėra geras dalykas. Šie laukai turėtų būti perkelti į savo stalą.

SalesID Pirmas Paskutinis Adresas Telefono numeris OfficeID
1 Samas Elliotas 118 Main St, Austin, TX (215) 555-5858 1
2 Alisa Kalvis 504 2nd Street, Niujorkas, NY (211) 122-1821 2
3 Joe Parapija 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID Biuras OfficeNumber
1 Austin Downtown (212) 421-2412
2 Niujorkas (rytai) (211) 855-4541

Šis dizaino tipas taip pat leidžia jums pridėti papildomos informacijos "Office" stalui, nesudarant nerimastingumo košmaro pardavėjų lentelėje. Įsivaizduokite, kiek darbo būtų paprasčiausiai sekti gatvių adresą, miestą, valstybę ir pašto kodą, jei visa ši informacija būtų parduodamo asmens staliniuose!

Duomenų bazės klaida # 3. Du ar daugiau informacijos dalių įvedimas į vieną lauką

Biuro informacijos įterpimas į pardavimų lentelę nebuvo vienintelė problema su ta duomenų baze. Adreso lauke buvo trys informacijos: gatvės adresas, miestas ir valstybė. Kiekviename duomenų bazės lauke turi būti tik viena informacija. Kai viename lauke yra keli informacijos vienetai, gali būti sunkiau užklausą duomenų bazėje gauti informaciją.

Pvz., Ką daryti, jei norėtume užklausti visus pardavėjus iš Austin? Mes turėtume ieškoti adreso laukelyje, kuris yra ne tik neveiksmingas, bet gali sugrąžinti blogą informaciją. Galų gale, kas atsitiks, jei kažkas gyveno Ostino gatvėje Portlande, Oregone?

Štai kaip turėtų atrodyti lentelė:

SalesID Pirmas Paskutinis 1 Adresas 2-as Adresas Miestas Valstija Zip Telefonas
1 Samas Elliotas 118 pagrindinė g Austin TX 78720 2155555858
2 Alisa Kalvis 504 2-oji šv Niujorkas NY 10022 2111221821
3 Joe Parapija 428 Aker St Ap 304 Austin TX 78716 2155455545

Čia yra keletas dalykų, kuriuos reikia atkreipti dėmesį. Pirma, "Address1" ir "Address2", atrodo, patenka į pasikartojančių laukų klaidą.

Tačiau šiuo atveju jie susiję su atskirais duomenimis, tiesiogiai susijusiais su pardavėjo asmeniu, o ne su pakartotine duomenų grupe, kuri turėtų būti pateikta savo lentelėje.

Be to, kaip papildomos klaidos, kad būtų išvengta, pastebėsite, kaip telefono numerio formatavimas buvo pašalintas iš lentelės. Turėtumėte vengti laikyti laukų formatą, kai tai įmanoma. Telefono numerių atveju yra keletas būdų, kaip žmonės parašo telefono numerį: 215-555-5858 arba (215) 555-5858. Tai leistų ieškoti pardavėjo pagal savo telefono numerį arba sunkiau surasti to paties rajono kodo pardavėjus.

Duomenų bazės klaida Nr. 4: nenaudojamas teisingas pirminis raktas

Daugeliu atvejų norėsite naudoti savo pirminį raktą automatiškai didėjantį skaičių arba kitą generuojamą skaičių arba raidinį skaitmeninį skaičių. Neturėtumėte naudoti bet kokios faktinės pirminės raktos informacijos, net jei atrodytų, kad tai būtų geras identifikatorius.

Pavyzdžiui, kiekvienas turi savo individualų socialinio draudimo numerį, todėl darbuotojo duomenų bazės socialinio draudimo numeris gali atrodyti kaip gera idėja. Tačiau nors ir retai, netgi socialinio draudimo numeris gali pasikeisti, o mes niekada nenori, kad mūsų pagrindinis raktas pasikeistų.

Ir tai yra problema, kai faktinė informacija naudojama kaip pagrindinė vertybė. Tai gali pasikeisti.

Duomenų bazės klaidos Nr. 5: nenaudojant pavadinimo konvencijos

Tai gali atrodyti kaip didelis įvykis, kai pirmą kartą pradedate kurti savo duomenų bazę, tačiau kai tik įvedate užklausas prieš duomenų bazę, norėdami gauti informaciją, pavadinimų sudarymo taisyklė padės prisiminti laukų pavadinimus.

Įsivaizduokite, kiek daug sudėtingesnio būtų šis procesas, jei vardai būtų saugomi kaip Pirmasis vardas, LastName vienoje lentelėje ir First_name, Last_name kitoje lentelėje.

Dvi populiariausios vardų nustatymo konvencijos yra pagrindinės kiekvieno žodžio pirmosios raidės lauke arba žodžių atskyrimas naudojant požymį. Taip pat galite pamatyti kai kuriuos kūrėjus, kurie naudoja pirmąją kiekvieno žodžio raidę, išskyrus pirmąjį žodį: firstName, lastName.

Taip pat norėsite nuspręsti, ar naudoti vienodus lentelių pavadinimus ar daugiskaitos lentelių pavadinimus. Ar tai užsakymų lentelė ar užsakymų lentelė? Ar tai kliento stalas ar klientų stalas? Vėlgi nenorite, kad būtų įstrigę Užsakymo lentelėje ir Klientų lentelėje.

Pasirinkta pavadinimo sutartis nėra tokia svarbi, kaip faktinio pasirinkimo proceso ir priderinimo prie pavadinimo konvencijos.

Duomenų bazės klaida # 6: netinkamas indeksavimas

Indeksavimas yra vienas iš sunkiausių dalykų, reikalaujančių teisingumo, ypač tiems, kurie nauji duomenų bazių projekte. Visi pagrindiniai raktai ir užsienio raktai turi būti indeksuojami. Tai yra nuorodos lentelės kartu, todėl be indekso matysite labai blogą našumą iš savo duomenų bazės.

Tačiau dažnai praleidžiami kiti dalykai. Tai laukai "WHERE". Jei dažnai stengiatės susiaurinti paiešką, naudodami lauką WHERE išlygos, norėtumėte galvoti apie indekso įvedimą toje srityje. Tačiau nenorite pernelyg indeksuoti lentelės, o tai taip pat gali pakenkti našumui.

Kaip nuspręsti? Tai yra duomenų bazių kūrimo meno dalis. Nereikia jokių griežtų apribojimų, kiek indeksų turėtumėte pridėti prie stalo. Pirmiausia, jūs norite indeksuoti bet kurį lauką, kuris dažnai naudojamas WHERE sąlyga. Sužinokite daugiau apie tinkamą jūsų duomenų bazės indeksavimą.