Gemeentlike mislearrings makke yn databankûntwerp

Oft jo wurkje mei in databank dy't hûnderten opsjes of miljoenen rekôr hâldt, is it juste database ûntwerp altyd belangryk. Net allinnich sil it ynformearjen fan de ynformaasje folle makliker meitsje, it sil ek ferienfâldigje it útwreidzjen fan de database yn 'e takomst. Spitigernôch is it maklik te fallen yn in pear trapen dy't dingen dreech meitsje kinne yn 'e takomst.

Der binne folsleine boeken dy't skreaun binne op it ûnderwerp fan normearjen fan in database, mar as jo dizze gewoane fout miskien ferlykje, sille jo op it goeie track wêze om goede database ûntwerp.

Databank Mistake # 1: Repeatje fjilden yn in tabel

In basic rule of thumb foar goede database ûntwerp is om werhelle gegevens te erkennen en dizze werhellende kolommen yn eigen tabel te setten. It werjaan fan fjilden yn in tafel is gewoanlik foar dyjingen dy't út 'e wrâld fan spreadsheets kommen binne, mar wylst spreadsheets lykwols flak binne troch ûntwerp, databases moatte relaasjes wêze. It liket fan 2D nei 3D.

Gelokkich, repetitive fjilden binne normaal maklik te spotsjen. Sjoch in tabel nei dizze tafel:

Bestelnûmer Product1 Product2 Product3
1 Teddy bearen Snobbersguod
2 Snobbersguod

Wat bart as in opdracht fjouwer produkten befettet? Wy moatte in oare fjild taheakje oan it tafel om mear as trije produkten te stypjen. En as wy in kliïntapplikaasje om 'e tafel boud hawwe om ús gegevens yn te nimmen, kinne wy ​​it nedich wêze om it mei it nije produktfjild te feroarjen. En hoe fine wy ​​alle bestellingen mei Jellybeans yn 'e oarder? Wy wurde twongen om alle produktfjilden yn 't tafel te sykjen mei in SQL-oanfetting dy't socht kin: SELECT * FROM PRODUCTS WHERE Product1 =' Jelly Beans 'OR Product2 =' Jellybeans 'OR Product3 =' Jelly Beans '.

Yn stee fan in inkele tafel dy't alle ynformaasje yn 'e kunde stomt, moatte wy trije tafels hawwe dy't elk in ûnderskate stikje ynformaasje hawwe. Yn dit foarbyld wolle wy in tabblad Orders mei ynformaasje oer de oarder sels, in produkt tafel mei al ús produkten en in tablet ProductOrders dy't keppele produkten nei de oarder keppele.

Bestelnûmer CustomerID Bestjoersdatum Totaal
1 7 1/24/17 19.99
2 9 1/25/17 24.99
ProductID Produkt Telle
1 Teddy bearen 1
2 Snobbersguod 100
ProductOrderID ProductID Bestelnûmer
101 1 1
102 2 1

Notysje hoe't elke tafel in eigen unyk ID-fjild hat. Dit is de primêre kaai. We keppele tabellen troch in primêre kaaiwearde as in frjemdske toets yn in oare tabel te brûken. Lês mear oer primêre toetsen en frjemde kaaien.

Databank Mistake # 2: In tabel yn in tabel ynbouwe

Dit is in oare mienskiplike flater, mar it docht net altyd sa folle as repetitive fjilden. By it opstellen fan in database kinne jo derfoar soargje dat alle gegevens yn in tabel har sels hawwe. It is lykas it spultsje fan it bern oer it spottjen wat oars is. As jo ​​in banaan, in aardbei, in pear en in televyzje set hawwe, is it tillevyzje-set nei alle gedachten oars.

Neist deselde rigels, as jo in tabel fan ferkeappersonen hawwe, moatte alle ynformaasje yn dat tabel spesjaal relatearje oan dy ferkeaperpersoan. Elke ekstra ynformaasje dy't net unyk is foar dat ferkeaper kin hearre oars wat oars yn jo database.

SalesID Earste Lêst Adres Telefoannûmer Kantoar OfficeNumber
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 Austin Downtown (212) 421-2412
2 Alice Smith 504 2e Street, New York, NY (211) 122-1821 New York (East) (211) 855-4541
3 Joe Parochy 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

Wylst dizze tabel liket te sjen, is it allegear ferbûn mei de yndividuele fertsjintwurdiger, hat er eins in tabel ynboud yn 'e tafel. Notysje hoe't it Büro en OfficeNumber werhelje mei "Austin Downtown". Hokker as in kantoar tillefoanniel feroaret? Jo soene in folsleine set fan gegevens oanmeitsje moatte foar ien inkele stikje ynformaasjeynformaasje, dy't nimmen goed is. Dizze fjilden moatte ferpleatst wurde nei har eigen tabel.

SalesID Earste Lêst Adres Telefoannûmer OfficeID
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 1
2 Alice Smith 504 2e Street, New York, NY (211) 122-1821 2
3 Joe Parochy 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID Kantoar OfficeNumber
1 Austin Downtown (212) 421-2412
2 New York (East) (211) 855-4541

Dit soarte fan ûntwerp jout jo ek de mooglikheid om ekstra ynformaasje nei de buroblêd te foegjen sûnder in nachtmerje fan skeakel te meitsjen yn 'e ferkeap personielstafel. Stel dan hoefolle wurk it wie om ienfâldich te folgjen fan strjitte adres, stêd, steat en postkoade as al dizze ynformaasje yn 'e ferkeap personielstafel wie!

Databank Mistake # 3: It pleatsen fan twa of mear stikken ynformaasje yn in single fjild

It ynbieden fan de kantine-ynformaasje yn 'e ferkeapingsstafel wie net it ienige probleem mei dy databank. It adresfjild befettet trije stikken ynformaasje: it strjitadres, de stêd en de steat. Elk fjild yn 'e databank moat allinich ien inkeld stikje ynformaasje befetsje. As jo ​​in meardere stikken ynformaasje hawwe op ien fjild, kin it hurder wurde om de databank foar ynformaasje op te nimmen.

Bygelyks, wat wolle wy in query útfiere oer alle ferkeapers fan Austin? Wy moatte socht sykje yn it adresfjild, dat net allinnich net effisjint is, mar kin ferkearde ynformaasje weromjaan. Nei allegear, wat bart as immen op Austin strjitte yn Portland, Oregon wenne?

Hjir is wat de tafel liket te sjen:

SalesID Earste Lêst Adres1 Adres2 Stêd Steat Zip Telefoan
1 Sam Elliot 118 Main St Austin TX 78720 2155555858
2 Alice Smith 504 2e St New York NY 10022 2111221821
3 Joe Parochy 428 Aker St Apt 304 Austin TX 78716 2155455545

Der binne in pear dingen te besjen. Earst, "Adres1" en "Adres2" soe miskien falle ûnder de repetitive fjilden falle.

Yn dat gefal binne se lykwols ferwize nei ôfsûnderlike stikken fan gegevens dy't direkt oan 'e ferkeaper persoan relatearje as in werhellende groep fan gegevens dy't yn eigen tabel gean moatte.

Ek as in bonusfeest om te foarkommen, besjen hoe't de formaat foar it tillefoannûmer út 'e tafel ôfstutsen is. Jo moatte foarkommen dat it formaat fan fjilden opslein wurdt as it mooglik is. Yn it gefal fan tillefoannûmers hawwe der meardere manieren skriuw in telefoannûmer: 215-555-5858 of (215) 555-5858. Dit soe socht sykje nei in ferkeappersoan troch har tillefoannûmer of in sykjen nei ferkeappersonen yn deselde gebietskoade.

Databankfekânsje # 4: Net brûk meitsje fan in krekte primêre kaai

Yn 'e measte foarbylden wolle jo in automatysk ynkommensnûmer brûke, of in oar generearre nûmer of alphanumeryk foar jo primêre kaai. Jo moatte foarkomme dat jo gjin echte ynformaasje brûke foar de primêre kaai, sels as it klinkt as it in goede identifier makket.

Bygelyks, wy hawwe elk ús eigen yndividuele sosjale feiligensnûmer, sadat it sosjale feiligensnûmer brûke kin foar in meiwurkers database as in goed idee. Mar wylst seldsum is, is it mooglik om sels in sosjale feiligensnûmer te feroarjen, en wy wolle nea ús primêre kaai feroarje.

En dat is it probleem mei it brûken fan echte ynformaasje as in kaaiwurd. It kin feroarje.

Databankfaker # 5: Net gebrûk fan in nammenkonvint

Dit kin net as in grutte deal klinke as jo earst begjinne mei it opnimmen fan jo database, mar as jo it besprek meitsje fan fersiken tsjin de databank om ynformaasje te krijen, hat in nammenkomgong helpe as jo fjildnammen bepale.

Stel dan ris hoefolle slimmer dat proses soe wêze soe as nammen as FirstName, LastName yn in tafel en earste_name, lastname yn in oare tabel opslein waarden.

De twa populêre nammen konvenanten wurde de earste letter fan elke wurd yn 't fjild útwikselje of it getalearjen fan wurden mei in symboal. Jo kinne ek inkele ûntwikkelders sjen dy't de earste letter fan elke wurd útskriuwe, útsein it earste wurd: firstName, lastName.

Jo wolle ek beslute oer it brûken fan singulêre tabelnammen of meartal-tabelnammen. Is it in bestel tabel of in Orders tabel? Is it in kliuwtafel of kliïnstafel? Earst wolle jo net stutsen wurde mei in oarder-tafel en in tabel fan klanten.

It nammenkonvint dat jo kieze is net sa wichtich as it proses fan 'e feitlik seleksje te kiezen en te hâlden oan in nammenkonvint.

Database mislearre # 6: Unbeheindige yndeksearring

In yndeksearring is ien fan 'e hurdste dingen om rjocht te krijen, fral foar dy nije by database ûntwerp. Alle primêre toetsen en bûtenlânske kaaien moatte yndeksearre wurde. Dit binne wat keppelen tafels byinoar, dus sûnder in yndeks, sjogge jo tige minere prestaasjes út jo database.

Mar wat binne te faak misse binne de oare fjilden. Dit binne de "WHERE" fjilden. As jo ​​jo sykjen faak trochgean om troch te gean mei in fjild yn in WHERE-klausel, wolle jo tinke oan it ynstellen fan in yndeks op dat fjild. Jo wolle lykwols net wolle dat it tafel yn 't yndeksearje, wêrby't ek de prestaasje lestich is.

Hoe te besluten? Dit is in diel fan 'e keunst fan database-ûntwerp. Der binne gjin hurde limiten op hoefolle yndeksen jo moatte op in tafel sette. Yn it foarste plak wolle jo in fjild yndeksearje dy't faak brûkt wurdt yn in WHERE-klausel. Lês mear oer goed yndeksearing fan jo databank.