2017 m. spalio 20 d., penktadienis

Duomenų bazių projektavimas

Duomenų tipai

Kuriant lentelę reikia išvardyti jos stulpelius, kiekvienam kurių būtina nurodyti galimų reikšmių
aibę– stulpelio tipą. Visų pirma stulpelio duomenų tipui priskiriama duomenų rūšis:

  • Simboliniai duomenys
  • Dvejetainiai duomenys
  • Skaičiai
  • Datos
  • Laikas

Simboliniai duomenys (angl. character datatypes).

Simbolių eilutė turi simbolių skaičiaus atributą – ilgį. 

Fiksuoto ilgio simbolių eilutės:
  • CHAR(n) – iki 254 bait,
Kintamo ilgio:
  • VARCHAR(n) – iki 32672 (4000) baitų ilgio,
  • CLOB(n[K|M|G]) – iki 2 GB (4 GB).
Kai n > 254 užklausose negalima naudoti:
  • DISTINCT,GROUP BY,ORDER BY

Skaitiniai duomenys (number datatypes).

SMALLINT – sveikieji skaičiai [-32 768; 32 767].
INTEGER – „dideli“ sveikieji skaičiai (4 baitai) [-2 147 483 648; 2 147 483 647].
BIGINT – „ypač dideli“ sveikieji skaičiai (8 b)
REAL – slankiojo kablelio skaičiai, 32 bitai, pvz., -2E5, 5.555E-18, -.655645e8.
FLOAT (DOUBLE) – dvigubo tikslumo skaičiai (64 b)
DECIMAL (n, m) (NUMERIC) – dešimtainiai supakuoti skaičiai – iki 1000 (31) dešimtainių
skaitmenų.

Dvejetainiai duomenų tipai (binary datatypes).

BIT(n)- Fiksuoto ilgio:

Kintamojo ilgio:
BIT VARYING(n)
BLOB(n[K|M|G])


Datos ir laiko duomenys.
DATE – (atmintyje – 4 baitai)
TIME – (3 baitai)
TIMESTAMP –(10 bait)
DATE ir TIME vaizdavimas priklauso nuo terpės
(locale),
2005.01.01, 12:00:00,
2005-01-01-12.15.55.330000
DBVS visada „supranta“ ISO datą ir laiką:
2005-01-01, 12:00:00

Visi SQL duomenų tipai turi ypatingą reikšmę - NULL.

Parinkus stulpeliui duomenų tipą, reikia parinkti ilgio charakteristiką ir tikslumą.


Lentelės kūrimo sintaksė

CREATE TABLE

Kuriant (apibrėžiant) lentelę būtinai nurodoma:
  • lentelės vardas.
  • lentelės stulpelių vardai ir jų tipai.

NOT NULL - stulpelis negali įgyti NULL reikšmės.
DEFAULT - numatytoji reikšmė

Indeksų kūrimas

Indeksas yra objektas kuris gali pagreitinti priėjimą prie duomenų, pateikiant eilutes iš lentelės vartotojui. Jie gali būti sukuriami automatiškai ar išoriškai. Jei nėra indekso priskirto stulpeliui tai pilna lentelė bus peržiūrima.
Indeksas pasirūpina tiesioginį ir greitą priėjimą prie eilučių lentelėse. Jų tikslas yra pašalinti diskų I/O operacijas, tam panaudojant indeksų dalį . Indeksus automatiškai naudoja ir palaiko ORCLE Serveris. Kai jau kartą indeksai yra sukurti, jokių vartotojo tiesioginių veiksmų nereikia. Indeksai yra logiškai ir fiziškai nepriklausomi nuo lentelės kuriai jie sukurti. Tai reiškia kad jie gali būti sukurti ar panaikinti bet kuriuo laiku ir neturi įtakos bazinei lentelei ar kitiems indeksams. Kai lentelė panaikinama, surišti su ja indeksai taip pat panaikinami.Taigi indeksai kuriami automatiškai ar rankiniu būdu. Automatiškai jie kuriami kai jūs nustatote pirminį raktą arba stulpelio reikšmes apibūdinate kaip unikalias. Rankiniu būdu galima suskurti indeksą dėl neunikalių stulpelio reikšmių kad pagreitinti priėjimą prie eilučių.

Indeksas gali būti kuriamas vienai ar keliems stulpeliams.
CREATE INDEX Indeksas ON Lentelė (Stulpelis1[,stulpelis2]...);

Padidinti užklausos greitį galima per Ename lentelei EMP.
CREATE INDEX Emp_Ename_idx ON EMP(Ename);
DROP INDEX Emp_Ename_Index;

Daug indeksų lentelei nereiškia kad tai pagreitins darbą. Kiekviena DML operacija kuri
baigiama per COMMIT lentelei su indeksais reiškia kad ir indeksai turi būti atnaujinami.
Daugiau indeksų kuriuos surišate su lentele, daugiau pastangų Serveris turi kad atnaujinti
indeksus po DML.

Indeksai kuriami kai:
  • Dažnai stulpeliai naudojami paragrafe WHERE ar apjungimo sąlygoje
  • Stulpelis talpina plačią reikšmių eilę.
  • Stulpelis talpina didelį kiekį NULL reikšmių
  • Du ar daugiau stulpelių dažnai naudojamos kartu WHERE paragrafe ar apjungimo sąlygoje
  • Lentelė yra didelė ir daugumoje užklausų yra pateikiami 2-4% visų lentelės eilučių.

Negalima kurti indeksų:
  • Kai lentelė yra maža.
  • Stulpeliai nėra dažnai vartojami kaip sąlyga užklausoje.
  • Dauguma užklausų tikisi ištraukti daugiau nei 2-4% visų lentelės eilučių.
  • Lentelė dažnai yra atnaujinama.

DB projektavimas
  • Atliekamas prieš pradedant DB formavimo procesą.
  • Svarbus norint sukurti efektyvią, tikslią, poreikius atitinkančią sistemą.
  • Patartina planavimą pradėti raštu ant balto popieriaus lapo.
  • Nors atrodo, kad toks projektavimas yra laiko gaišimas pradžioje, tačiau išties daugiau laiko sugaištama vėliau, jei prieš tai neplanuojama.
DB projektavimo procesas

  1. Numatyti duomenų bazės paskirtį.
  2. Apibrėžti, kokios lentelės bus reikalingos.
  3. Apibrėžti, kokie laukai turės būti DB lentelėse.
  4. Nurodyti laukus su unikaliomis reikšmėmis.
  5. Nustatyti, kaip lentelės siesis tarpusavyje.
  6. Tobulinti pradinį projektą.

DB paskirtis

Pradedant kurti duomenų bazę reikia atsakyti į tris esminius klausimus:

  1. Kokius duomenis turėtų kaupti duomenų bazė?
  2. Kokią informaciją apie šiuos duomenis norės žinoti DB vartotojas?
  3. Kokius veiksmus vartotojas norės atlikti su duomenimis?

Išoriniai raktai:

Pirminiai raktai taip pat atlieka vaidmenį kuriant ryšius tarp lentelių. Vienos lentelės
pirminis laukas įterpiamas į kitą lentelę ir tampa ten išoriniu raktu.

DB normalizavimas 
  • Patikrinimas, kad:
    • Lentelėje yra tik su pirminiu raktu susiję duomenys,
    • Kad kiekviename lauke yra tik vienas duomenų blokas.
    • Kad pasikartojantys duomenys yra eliminuoti
  • Normalizavimo tikslai:
    • Duomenų surikiavimas į tokias logines grupes, kad kiekviena grupė apibūdintų
    • dalį visumos;
    • Pasikartojančių duomenų kiekio duomenų bazėje minimizavimas;
    • Efektyviai ir greitai prieinamos ir valdomos duomenų bazės sukūrimas nepakenkiant duomenų vientisumui;
    • Sukūrimas tokios struktūros, kad keičiant duomenis, juos reikėtų taisyti tik vienoje vietoje.
Ryšiai tarp lentelių

Ryšys – sąsaja tarp bendrų laukų dvejose duomenų bazės lentelėse.
Trys tipai:
  • 1:1
    • Naudojamas retai, paprastai dėl saugumo, arba kai dalis lentelės laukų dažniausiai būna tušti
  • ◦1:∞
    • Dažniausiai naudojamas ryšys. Pirminis raktas su išorinio rakto lauku kitoje lentelėje
  • ◦∞: ∞
    • Reikia skaidyti į du 1:∞ ryšius per tarpinę lentelę
Tobulinimas

Sudėliojus pirminį DB projektą (lentelės, laukai ir ryšiai) reikia atidžiai jį išnagrinėti, ieškant galimų trūkumų.

Patikrinkite, ar tokia duomenų bazės struktūra leis jums gauti tuos atsakymus, kurių norite.

Paskutinė galimybė lengvai ištaisyti DB struktūros klaidas!


Dažniausios klaidos
  • Per mažai dėmesio planavimui
  • Normalizavimo ignoravimas
  • Prastai parinkti laukų/lentelių pavadinimai
  • Dokumentacijos trūkumas

Komentarų nėra:

Rašyti komentarą

Etiketės