Neformalna vodila
Neformalno vodilo - semantika atributov
Posledica grupiranja atributov pri ustvarjanju relacij je tudi pridruževanje določenega pomena (semantike) posameznemu atributu. Pri tem je potrebno upoštevati nasvete:
- relacije načrtujte tako, da bo enostavno pojasniti njen pomen;
- ne kombinirajte (mešajte) atributov različnih tipov entitet v eni relaciji.
Primer 'slabe' relacije: Delavec (Davčna_st, Priimek, Ime, Naslov, Ime_Oddelka, Vodja_oddelka, Naslov oddelka)
Relacija vsebuje atribute entitetnega tipa Delavec (njegovo davčno številko, priimek, ime, naslov in oddelek, v katerem dela) in atribute entitetnega tipa Oddelek (oddelek, vodjo oddelka in naslov oddelka).
Neformalno vodilo - zmanjševanje podvajanj vrednosti v vrsticah tabele
En od ciljev načrtovanja je tudi zmanjšanje potrebnega pomnilniškega prostora za hranjenje podatkov v relaciji. Način grupiranja atributov v relacije ima velik vpliv na porabo pomnilnika, t.j. napačno grupiranje atributov lahko ima za posledico tudi anomalije, do katerih pride pri posodabljanju podatkov. Posledice anomalij so neskladnosti in dvoumnosti med podatki ali (celo) njihova izguba.
Primer relacije s podvajanjem vrednosti
Delavec | ||||
DelavecID | Priimek | OddelekID | ImeOddelka | Kraj oddelka |
104 | Perko | 3 | Prodaja | Ljubljana |
180 | Mevded | 2 | Finance | Maribor |
192 | Volk | 2 | Finance | Maribor |
197 | Pihlar | 3 | Prodaja | Ljubljana |
199 | Kalin | 2 | Finance | Maribor |
Vrste anomalij pri posodabljanju podatkov
1. Anomalije pri dodajanju novih zapisov:
- ker je ključ relacije Delavec atribut Davčna številka, ne moremo dodati novega oddelka, v katerem ni še nihče zaposlen;
- vnos vseh podatkov o oddelku, v katerem je delavec zaposlen, mora biti povesem točen ali pa povsod moramo vpisati NULL -> za avtomatizacijo preverjanja veljavnosti novih podatkov moramo napisati del programske kode
Delavec | ||||
DelavecID | Priimek | OddelekID | ImeOddelka | Kraj oddelka |
104 | Perko | 3 | Prodaja | Ljubljana |
180 | Mevded | 2 | Finance | Maribor |
192 | Volk | 2 | Fruinance | Maribor |
197 | Pihlar | 3 | Prodaja | Ljubljana |
199 | Kalin | 2 | Finance | Maribor |
2. Anomalije pri brisanju zapisov - lahko pride do izgube podatkov:
- če pride do brisanja vseh delavcev iz oddelka 2, hkrati izgubimo tudi vse ostale podatke o oddelku (ime oddelka, kraj oddelka).
Delavec DelavecID Priimek OddelekID ImeOddelka Kraj oddelka 104 Perko 3 Prodaja Ljubljana 180 Mevded 2 Finance Maribor 192 Volk 2 Finance Maribor 197 Pihlar 3 Prodaja Ljubljana 199 Kalin 2 Finance Maribor
Kam je 'izginil' oddelek 2?
3. Anomalije pri spreminjanju vrednosti atributov - lahko pripeljejo do nekonsistentnosti (neskladnosti) podatkov:
- Če se je oddelek 2 preselil iz Maribora v Kranj, moramo to spremembo vpisati v vse vrstice relacije, v katerih so delavci, ki delajo v oddelku 2.
- Posledici: zamudnost pri posodabljanju podatkov in možnost nepopolne posodobitve (dvoumni podatki).
Delavec | ||||
DelavecID | Priimek | OddelekID | ImeOddelka | Kraj oddelka |
104 | Perko | 3 | Prodaja | Ljubljana |
180 | Mevded | 2 | Finance | Kranj |
192 | Volk | 2 | Finance | Kranj |
197 | Pihlar | 3 | Prodaja | Ljubljana |
199 | Kalin | 2 | Finance | Maribor |
Nasveti:
- PB načrtujte tako, da se ne more pojaviti nobena od anomalij pri dodajanju, brisanju ali modificiranju podatkov.
- Če pride do katerekoli anomalije, poskrbite, da vse aplikacije, ki dostopajo do PB posodobijo vsebino baze tako, da ohranijo integriteto (celovitost) podatkov. To je sicer težja naloga, ker zahteva dobro koordinacijo z vsemi programerji, ki pišejo uporabniške aplikacije.
Neformalno vodilo - zmanjševanje števila opcijskih atributov
Posledice pogoste pojavitve vrednosti NULL v zapisih so
- izguba pomnilniškega prostora in
- manjša semantična vrednost podatkov - NULL vrednosti vplivajo na semantiko (pomen) relacije in na opredelitev različnih operacij (povezovanje relacij , agregacija (združevanje) podatkov, ..).
Možne interpretacije pomena vrednosti NULL so:
- atribut nima pomena za to relacijo,
- vrednost atributa je za ta zapis neznana,
- vrednost atributa je sicer znana, vendar še ni zabeležena.
Zaradi enake predstavitve (vrednost NULL) za vse navedene možnosti, je pridobivanje informacij iz tovrstnega zapisa dvoumno in zato vprašljivo.
Nasveti:
- V največji možni meri se izogibajte dovoljevanju null vrednosti za atribute osnovnih relacij.
- Če so vrednosti null neizogibne, zagotovite, da se pojavljajo le v izjemnih primerih in da se ne pojavljajo v večini primerov.
Neformalno vodilo - preprečiti 'sumnjive zapise'
Nekakovostna (slaba) dekompozocija (delitev) velike relacije v množico manjših lahko povzroča množico težav. V praksi lahko pride do situacije, da se zaradi dekompozicije informacije osnovne relacije lahko tudi izgubijo ali popolnoma popačijo. To lahko ugotovimo takrat, ko manjše relacije ponovno povežemo nazaj. V tem prieru je rezultirajoča relacija večja od originalne, ker vsebuje množico neveljavnih oz. simnjivih zapisov.
Primer slabo opravljene dekompozicije:
a) osnovna relacija:
Delavec | ||||
DelavecID | Priimek | Kraj | Država | Poštna št. |
104 | Perko | Ljubljana | Slovenija | 1000 |
180 | Mevded | Maribor | Slovenija | 2000 |
192 | Volk | Trst | Italija | 3006 |
197 | Pihlar | Ljubljana | Slovenija | 1000 |
199 | Kalin | Ljubljana | Slovenija | 1000 |
b) Delitev relacije Delavec na relaciji Delavec1 in Šifrant pošt:
Delavec1 |
| |||||
DelavecID | Priimek | Kraj | Država |
| Poštna št. | Država |
104 | Perko | Ljubljana | Slovenija |
| 1000 | Slovenija |
180 | Mevded | Maribor | Slovenija |
| 2000 | Slovenija |
192 | Volk | Trst | Italija |
| 3006 | Italija |
197 | Pihlar | Ljubljana | Slovenija |
|
|
|
199 | Kalin | Ljubljana | Slovenija |
|
|
|
c) posledica izvedbe povezovanja tabel Delavec1 in Seznam pošt:
- dobljena tabela je večja od osnovne
- tabela ima neveljavne (sumnjive) zapise.
Delavec | ||||
DelavecID | Priimek | Kraj | Država | Poštna št. |
104 | Perko | Ljubljana | Slovenija | 1000 |
104 | Perko | Ljubljana | Slovenija | 2000 |
180 | Medved | Maribor | Slovenija | 2000 |
180 | Medved | Maribor | Slovenija | 1000 |
192 | Volk | Trst | Italija | 3006 |
197 | Pihlar | Ljubljana | Slovenija | 1000 |
197 | Pihlar | Ljubljana | Slovenija | 2000 |
199 | Kalin | Ljubljana | Slovenija | 1000 |
199 | Kalin | Ljubljana | Slovenija | 2000 |
Nasveti za preprečevanje neveljavnih zapisov: