Adatbázis-tervezésben előforduló gyakori hibák

Akár olyan adatbázissal dolgozik, amely több száz rekordot vagy több millió rekordot tárol, a megfelelő adatbázis-tervezés mindig fontos. Nemcsak hogy megkönnyíti az információ visszakeresését, hanem egyszerűsíti az adatbázis bővítését a jövőben. Sajnos könnyű néhány csapdába esni, ami a jövőben megnehezíti a dolgokat.

Számos könyv létezik az adatbázis normalizálásánál, de ha egyszerűen csak elkerüli ezeket a gyakori hibákat, akkor jó úton halad a jó adatbázis-tervezéshez.

Adatbázis hiba # 1: Ismétlődő mezők egy táblázatban

A jó adatbázishoz való alapvető szabály az, hogy ismételje az ismétlődő adatokat, és ezeket az ismétlődő oszlopokat saját táblájukba helyezze. A tábla mezők ismétlődése gyakori azok számára, akik a táblázatok világából származtak, de a táblázatok általában tervszerűen laposak, az adatbázisoknak kapcsolódniuk kell. Olyan, mintha 2D-ről 3D-re megyünk.

Szerencsére az ismétlődő mezőket általában könnyű észrevenni. Nézzétek meg ezt a táblázatot:

Rendelés azonosító Termék1 Termék2 Product3
1 Játékmacik Jelly bab
2 Jelly bab

Mi történik, ha egy megrendelés négy terméket tartalmaz? A táblázathoz további mezőt kell hozzáadni, hogy több mint három terméket támogassunk. Ha pedig az asztal köré építettünk egy ügyfélalkalmazást, hogy segítsen az adatok bevitelében, módosítani kell az új termékmezővel. És hogyan találjuk meg az összes rendelést a Jellybeans-el a sorrendben? Arra kényszerülnénk, hogy a táblázatban szereplő összes termékmezőt egy olyan SQL utasítással lekérdezzük, amely úgy néz ki, mint: SELECT * FROM Products WHERE Product1 = 'Jelly Beans' VAGY Product2 = 'Jelly Beans' VAGY Product3 = 'Jelly Beans'.

Ahelyett, hogy egyetlen táblázatot adnánk, amely összegyűjti az összes információt, három táblával kell rendelkeznünk, amelyek mindegyike különálló információt tartalmaz. Ebben a példában szeretnénk megrendelést tartalmazó táblázatot, amely magában foglalja a megrendelést, a terméktáblázatot az összes termékünkkel és a ProductOrders táblagépet, amely összekapcsolta a termékeket a megrendeléssel.

Rendelés azonosító Ügyfél-azonosító Rendelés dátuma Teljes
1 7 1/24/17 19.99
2 9 1/25/17 24.99
Termék azonosító Termék Számol
1 Játékmacik 1
2 Jelly bab 100
ProductOrderID Termék azonosító Rendelés azonosító
101 1 1
102 2 1

Figyeld meg, hogy az egyes táblázatoknak megvan a saját egyedi azonosítójuk. Ez az elsődleges kulcs. A táblázatokat az elsődleges kulcsérték használatával kapcsoljuk össze egy másik táblában idegen kulcsként. További információ az elsődleges kulcsokról és az idegen kulcsokról.

Adatbázis hiba # 2: Táblázat beágyazása a táblába

Ez egy újabb gyakori hiba, de nem mindig tűnik ki olyannyira, mint az ismétlődő mezők. Adatbázis tervezésénél ügyelni kell arra, hogy a táblázatban szereplő összes adat önmagára hivatkozzon. Olyan ez, mint a gyermeki játék, ami megkülönbözteti a különbséget. Ha van banánja, eper, barack és televízió, a televízió valószínűleg valahol máshol van.

Ugyanezek a sorok, ha van egy asztal az eladók, az összes információt az adott táblázatban kell kifejezetten az adott értékesítési személy. Minden olyan extra információ, amely nem egyedi az adott értékesítési személy számára, valahol máshol is szerepelhet az adatbázisban.

SalesID Első Utolsó Cím Telefonszám Hivatal OfficeNumber
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 Austin Downtown (212) 421-2412
2 Alice Kovács 504 2nd Street, New York, NY (211) 122-1821 New York (kelet) (211) 855-4541
3 Joe Plébánia 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

Bár ez a táblázat úgy néz ki, mintha az az egyes értékesítőkhöz tartozna, ténylegesen van táblája a táblázatban. Vegye észre, hogy a "Office és OfficeNumber" megismétli az "Austin Downtown" -ot. Mi történik, ha az irodai telefonszám megváltozik? Egy adatcsomagot frissíteni kell egy adatcserére, ami soha nem jó dolog. Ezeket a mezőket át kell helyezni a saját táblájukba.

SalesID Első Utolsó Cím Telefonszám OfficeID
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 1
2 Alice Kovács 504 2nd Street, New York, NY (211) 122-1821 2
3 Joe Plébánia 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID Hivatal OfficeNumber
1 Austin Downtown (212) 421-2412
2 New York (kelet) (211) 855-4541

Ez a fajta felépítés lehetővé teszi, hogy további információkat adjon hozzá a Hivatal asztalához anélkül, hogy rögtönzött rendetlenséget okozna az értékesítési személy táblájában. Képzeld el, hogy mennyi munkát kellene követnie az utcanevet, a várost, az államot és a postai irányítószámot, ha az összes információ az értékesítési asztalnál volt!

Adatbázis hiba # 3: Két vagy több információ beillesztése egy mezőbe

Az irodai adatok beillesztése az értékesítési személy táblájába nem volt az egyetlen probléma az adatbázisban. A cím mező három információt tartalmazott: az utcát, a várost és az államot. Az adatbázisban lévő minden mezőnek csak egy darab információt kell tartalmaznia. Ha egy mezőben több információ található, akkor nehezebb információt kérni az adatbázisban.

Például, mi lenne, ha lekérdeznénk az Austin összes értékesítőjén? A címmezőn belül kell keresnünk, ami nemcsak nem hatékony, hanem rossz információkkal is szolgálhat. Végtére is, mi történik, ha valaki az Oregon-i Portland-i Austin utcán élt?

Az alábbi táblázatnak kell lennie:

SalesID Első Utolsó Cím 1 Cím 2 Város Állapot Postai irányítószám Telefon
1 Sam Elliot 118 Fő St Austin TX 78720 2155555858
2 Alice Kovács 504 2. sz New York NY 10022 2111221821
3 Joe Plébánia 428 Aker St Apt 304 Austin TX 78716 2155455545

Van itt néhány dolog, amit meg kell jegyezned. Először is, a "Cím1" és a "Cím2" látszólag az ismétlődő mezők hibájába esnek.

Azonban ebben az esetben olyan különálló adatokra utalnak, amelyek közvetlenül kapcsolódnak az értékesítési személyhez, nem pedig egy olyan ismétlődő adatsorhoz, amely a saját táblájában megy.

Továbbá, mint elkerülendő bónusz hiba, észrevehetjük, hogy a telefonszám formázása le van-e húzva az asztalról. Ha lehetséges, kerülje a mezők formátumának tárolását. A telefonszámok esetében többféle módon írhatnak telefonszámot: 215-555-5858 vagy (215) 555-5858. Ez egy keresőszemélyt keresne telefonszámával, vagy ugyanazon a körzetszámmal rendelkező ügyfelek keresését nehezebbé teheti.

Adatbázis hiba # 4: Nem megfelelő primer kulcs használata

A legtöbb esetben egy automatikus növekményes számot vagy más generált számot vagy alfanumerikus kódot szeretne használni az elsődleges kulcs számára. Kerülje el az elsődleges kulcs tényleges adatait, még akkor is, ha úgy hangzik, mintha egy jó azonosítót eredményezne.

Például mindegyikünknek megvan a saját egyéni társadalombiztosítási száma, így a munkavállalói adatbázis társadalombiztosítási számának használata jó ötletnek tűnhet. De míg ritka, lehetséges, hogy még egy társadalombiztosítási szám is megváltozik, és mi soha nem akarjuk, hogy az elsődleges kulcsunk megváltozzon.

És ez a probléma a tényleges információk kulcsfontosságú értékekként történő használatával. Ez megváltozhat.

Adatbázis hiba # 5: Nem Naming egyezmény

Ez nem feltétlenül nagy dolognak tűnik, amikor először elkezdjük megtervezni az adatbázist, de miután eljutottunk az adatok lekérdezéséhez az adatok lekérdezéséhez, az elnevezési konvenció segít a térinformációk megjegyzésekor.

Képzeljük csak el, mennyire nehezebb lenne ez a folyamat, ha a neveket FirstName, LastName egy táblában és first_name, last_name egy másik táblában tároltuk.

A két legkedveltebb elnevezési konvenció a terepen lévő minden szó első betűjével, vagy az aláhúzás segítségével elválasztja a szavakat. Előfordulhat, hogy egyes fejlesztők is kihasználják minden szó első betűjét, kivéve az első szót: firstName, lastName.

Azt is el szeretné dönteni, hogy egyedi tennivalókat vagy több táblázatneveket használ. Rendelõ asztal vagy rendelési táblázat? Ügyféltábla vagy ügyfelek táblája? Ismét nem akarsz megragadni a rendelési táblázattal és az Ügyfelek táblával.

Az Ön által választott elnevezési egyezmény nem olyan fontos, mint az elnevezési egyezmény tényleges megválasztásának és ragaszkodásának folyamata.

Adatbázis hiba # 6: Nem megfelelő indexelés

Az indexelés az egyik legnehezebb dolog, hogy helyes legyen, különösen azok számára, akik az adatbázis kialakításában újak. Minden elsődleges kulcsot és idegen kulcsot indexálni kell. Ezek az összekapcsolási táblák, tehát index nélkül nagyon rossz teljesítményt fognak látni az adatbázisból.

De ami túl gyakran hiányzik a többi területen. Ezek a "WHERE" mezők. Ha gyakran szűkítené a keresést a WHERE záradék valamely mezőjével, akkor azt szeretné, ha egy adott indexet hozna létre ezen a mezőn. Azonban nem szeretné túlságosan indexelni az asztalt, ami szintén sérti a teljesítményt.

Hogyan döntenek? Ez az adatbázis tervezésének művészete. Nincsenek kemény határok, hogy hány indexet kell elhelyezni egy asztalra. Elsősorban bármely olyan mezőt szeretne indexelni, amelyet gyakran egy WHERE záradékban használnak. További információ az adatbázis megfelelő indexeléséről.