Gemeinsam Fehler an Madeira Database Design

Egal ob Dir mat enger Datebank schafft, déi Honnerte vu Records oder Millioune vu Rekorder hält, eegent Datenbankentwurf ass ëmmer wichteg. Net nëmme wäert et d'Informatioun erliichtert méi einfach maachen, et wäert och d'Erweiderung vun der Datebank erof vereinfachen. Leider ass et einfach, an e puer Traps ze falen, déi an der Zukunft schwéier Saachen maachen.

Et gi komplette Büroen geschwaat op d'Norméiere vun enger Datebank, awer wann Dir nëmmen dës gemeinsam Fehler fonnt vermeide wäerts du op de gudde Wee fir e gudde Datebank entworf.

Database Mistake # 1: Repeechen Felder an enger Tabell

Eng Basisregel vum Daum fir e gudde Datebank-Design ass d'Wiederholung vun Daten an ze erkennen an déi se widderhuelende Säulen op hirem eegenen Dësch ze setzen. Reparéiere vu Felder an engem Dësch ass verbreed fir Leit, déi aus der Welt vun Tëscherlëschten kommen, mä während Spreadsheets tendéieren flaach mat Design, Datebanken sollen relational sinn. Et ass wéi aus 2D op 3D.

Glécklech, repetitive Felder sinn normalerweis einfach ze gesinn. Nëmme kuckt op dës Dësch:

Bestellen Product1 Product2 Product3
1 Teddy Bears Jelly Beans
2 Jelly Beans

Wat geschitt wann eng Bestellung vier Produkter? Mir brauchen fir en aneren Feld op den Dësch ze addelen fir méi wéi dräi Produkter ze ënnerstëtzen. A wa mir eng Clientapplikatioun um Dësch leeën, fir eis Donnéeën ze hëllefen, brauche mer eventuell d'Modifikatioun vum neie Produktfeld. A wéi fanne mer all d'Bestellunge vu Jellybeans an der Uerdnung? Mir wären gezwongen, all Produktfelder an der Tabelle ze abonnéieren mat enger SQL-Ausso déi kéint aussoen: SELECT * FROM PRODUZEN WËLLT Produkt1 = 'Jelly Beans' ODER Product2 = 'Jelly Beans' ODER Product3 = 'Jelly Beans'.

Anstatt eng eenzeg Dësch ze hunn déi all Informatioun zesummen zesummegesat, musse mir dräi Dëscher hunn, déi all eenzelnen Informatiounsblock behaapten. An dësem Beispill wëlle mir eng Orders Tabel mat Informatioun iwwer d'Uerdnung selwer, e Produkter Dësch mat all eis Produkter an e ProductOrders Tablet, déi verbonne Produkter op d'Bestellung verbonnen hunn.

Bestellen CustomerID Bestellt Datum Total
1 7 1/24/17 19,99
2 9 1/25/17 24.99
ProductID Produkt Grof
1 Teddy Bears 1
2 Jelly Beans 100
ProductOrderID ProductID Bestellen
101 1 1
102 2 1

Remark: Wéi all Dësch huet en eegene unique ID Feld. Dëst ass den éischte Schlëssel. Mir linken Dëscher mat engem primäre Keesseschutz als externen Schlëssel an engem aneren Dësch. Liest méi iwwer Primärschlësselen an auslännesch Keys.

Database Mistake # 2: En Deel vun enger Table in enger Table

Dëst ass en anere gemeinsame Feeler, awer et ass net ëmmer sou gutt wéi repetitive Felder. Wann Dir eng Datebank entwéckelt, wëlls sécher sinn datt all d'Daten an engem Dësch op Iech zielen. Et ass wéi dat Spill vum Kanner iwwer Fleeg wat ass anescht. Wann Dir e Bananen, eng Erdbeeren, e Peach an e Fernsehgeriicht hunn, gehéiert d'Televisioun wahrscheinlech irgendwo aner.

Entdeckt un déi selwecht Linnen, wann Dir en Dësch vum Verkaf uginn, all d'Informatiounen an dëser Tabell sollen speziell mat deem Verkéiersliewen bezéien. All Extra Info, déi net eenzegaarteg ass, datt de Verkafssteller irgendeng aner an Ärer Datebank gehéieren.

SalesID Éischten Lescht Adress Telefonsnummer Office OfficeNumber
1 Sam Elliot 118 Haapt St, Austin, TX (215) 555-5858 Austin Downtown (212) 421-2412
2 Alice Smith 504 2. Street, New York, NY (211) 122-1821 New York (Ost) (211) 855-4541
3 Joe Parish 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

Obwuel dës Tafel et ausgesäit wéi et ass mat dem individuellen Verkäfer verbonne sinn, ass et eigentlech e Tabuert an den Dësch. Remark: Wéi de Office an OfficeNumber widderhuelen mat "Austin Downtown". Wat ass wann eng Büro Nummer Nummer ännert? Dir musst e ganze Set vu Daten fir e puer eenzel Informatiounsaachen änneren, dat ass ni eng gutt Saach. Dës Felder sollen an hirem eegenen Dësch bewegt ginn.

SalesID Éischten Lescht Adress Telefonsnummer OfficeID
1 Sam Elliot 118 Haapt St, Austin, TX (215) 555-5858 1
2 Alice Smith 504 2. Street, New York, NY (211) 122-1821 2
3 Joe Parish 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID Office OfficeNumber
1 Austin Downtown (212) 421-2412
2 New York (Ost) (211) 855-4541

Dës Zort Design huet och d'Fähegkeet fir extra Informatioun un der Office-Tabelle ze addéieren ouni en Albthmus vu Stécker an der Verkafsstatistabelle ze kreéieren. Stellt Iech vir a wéi vill Aarbecht et einfach wier ze verfollegen vun der Adressadress, Stad, Staat a Postleitzuel wann all dës Informatiounen an der Verkafspersounentabelle waren!

Database Mistake # 3: Opgepasst Zwee oder méi Informatiounstypen zu engem eenzegen Feld

Einbetten vun de Bürosinformatioun an de Verkafsstellentabelle war net dat eenzegt Problem mat der Datebank. Den Adressfeld enthielt dräi Stéck Informatiounen: d'Adress vun der Strooss, d'Stad an de Staat. All Felder an der Datebank däerf nëmmen ee eenzegt Stécker vun der Informatioun. Wann Dir verschidde Informatiounsaarte an engem eenzegen Feld hutt, kann et méi schwéier ginn, d'Datebank fir Informatiounen ze abonnéieren.

Zum Beispill, wéi wann mir eng Abfrage op all Vertriebspartner aus Austin ausféieren wollten? Mir géife gebucht an am Adressfeld ze sichen, wat net nëmme oneffizient ass, mä kann schlecht Informatioun äntwerten. Neen, wat passéiert wann een op der Austin Street zu Portland, Oregon gelieft huet?

Hei ass wat d'Tabelle sollt kucken:

SalesID Éischten Lescht Adress1 Adress2 Stad Staat Zip Telefon
1 Sam Elliot 118 Haaptst Austin TX 78720 2155555858
2 Alice Smith 504 2. St New York NY 10022 2111221821
3 Joe Parish 428 Aker St Apt 304 Austin TX 78716 2155455545

Et gi puer Zorte Fuerderen. Fir d'éischt, "Address1" an "Adress2" géifen schéngen ënnert de repetitive Felder falsch ze falen.

Allerdéngs, an dësem Fall, bezéien se sech op eenzel eenzel Stécker vun Daten, déi direkt un der Verkeefer sinn, anstatt eng méi ëmmer wiederholend Grupp vun Donnéeën déi an säin eegene Dësch goen.

Och als Bonusfehler fir ze vermeiden, bemierken wéi d'Formatéierung fir d'Telefonsnummer aus dem Dësch gestrooft gouf. Dir sollt d'Vermeeschtung vum Format vun Felder verhënneren wann et guer net méiglech ass. Am Fall vun Telefonsnummeren sinn et vill verschidde Weeër, wann Leit eng Nummer hunn: 215-555-5858 oder (215) 555-5858. Dëst géif eng Vertrauenspersoun mat hirer Telefonsnummer suchen oder eng Sich vu Verkafskandidaten an deem selwechte Beräichcode méi schwéier maachen.

Database Mistake # 4: Net e Correct Primary Key benotzen

An de meeschten Exemplaren wäerte Dir automatesch inkrementnell Zuelen oder eng aner generéiert Zuel oder alphanumeresch benotze fir Äre Primärschlass. Dir sollt vermeiden keng tatsächlech Informatioun fir den Primärschlass, och wann et kléngt wéi et e gudden Identifikateur mécht.

Zum Beispill, mir hunn eis eegent individuell Sozialversécherungsnummer, sou datt d'Sozialversécherungsnummer fir eng Employee Datebank ofhëlt wéi eng gutt Iddi. Awer zimlech rare sinn et och méiglech, datt och eng soziale Sécherheetsnummer ze changéieren, an datt mir ni wëllen eise Primärschlass änneren.

An dat ass de Problem mat der aktueller Informatioun als e Schlësselwäert. Et kann änneren.

Database Mistake # 5: Net vun enger Namingkonventioun

Dëst kéint net wéi eng grouss Deal kléngt, wann Dir uewen ugefangen hutt fir Är Datebank ze starten, awer wann Dir op d'Punkt schreift Ufroën géint d'Datebank fir d'Informatioun ze kréien, eng Namenskonventionnatioun hëlleft als Dir Felder ze späicheren.

Stellt Iech vir, wéi vill méi schwéier dës Prozedur wären wann d'Nimm als FirstName, LastName an enger Tabellé an als éischt_name gespaart sinn, last_name an engem aneren Dësch.

Déi zwee populär Namenskonvektiounen kapitaliséieren den éischte Bréif vun all Wuert am Feld oder trennen d'Wierder mat engem Ënnerscore. Dir kënnt och e puer Entwéckler hunn, déi den éischte Bréif vun all Wuert begrenzen, ausser den éischte Wuert: firstName, lastName.

Dir wëllt och decidéieren iwwer méigleche Tabellennamen oder Plural Table Nimm. Ass et e Bestellt Dësch oder en Orders Table? Ass et e Clienttisch oder Clienten Dësch? Elo, Dir wëllt net mat enger Bestelltabelle an enger Clientstabelle stecken.

Déi Nimmconventioun déi Dir gewielt hutt, ass net esou wichteg wéi de Prozess vun der aktueller Auswiel an engem Nimmconvent.

Database Mistake # 6: D'Opfaarnd Indexéierung

Indexéierter ass ee vun den haardsten Saachen fir richteg ze kommen, virun allem fir déi nei bei der Datebank. All Primärschlësselen an auslännesche Schlësselen sollten indirekt ginn. Dëst sinn d'Linken Dëscher zesummen, also ouni en Index, kënnt Dir ganz schlecht Resultater aus Ärer Datebank gesinn.

Mä wat ze vill ze vermeiden sinn déi aner Felder. Dëst sinn d'"WOU" Felder. Wann Dir dacks Är Äer Recherche schreift, andeems Dir e Feld an enger WHESS-Klausel benotzt, da wëlle Dir iwwer den Index setzen op deem Feld. Allerdéngs wësse mer net datt d'Tafel iwwermuer ginn, wat d'Performance och verletzt huet.

Wéi entscheeden? Dëst ass Deel vun der Konscht vun der Datebank. Et gi keng houfreg Grenzen op wéi vill Indizéier solle op engem Dësch setzen. Haaptsächlech, Dir wëllt all Feld ze indizéieren, deen heefeg an enger WHESS Klausel benotzt gëtt. Liest méi iwwer d'korrekt Indexéierung vun der Datebank.