Budowanie bazy danych




Budowanie bazy danych







Budowanie bazy danych

Tworzenie
baz i tabel
Typy
danych
Ograniczenia
dla kolumn
Indeksy



TWORZENIE BAZ I
TABEL
 
Tworzenie bazy danych
Baze danych tworzymy poleceniem CREATE DATABASE
nazwa_bazy_danych;
Sama nazwa bazy danych ma czesto postawione ograniczenia co
do dlugosci np. system ORACLE przyjmuje 8 znaków, MySQL (bodajze) 20 znaków.
Do instrukcji CREATE DATABASE mozna dodac wiele innych
polecen charakterystycznych dla danego silnika, które moga opisywac np. fizyczna
lokalizacje bazy danych na dysku.
 
Tworzenie tabeli
Przed utworzeniem nowej tabeli musimy sie upewnic, czy
zostala wybrana baza danych. Jezeli nie jestesmy pewni, zawsze mozemy ja wywolac
poleceniami USE badz DATABASE (np. USE MojaDB;).
Instrukcja tworzenia tabeli to CREATE TABLE i w najprostszym
wywolaniu wyglada tak:
 
CREATE TABLE nazwa_tabeli(nazwa_kolumny                  
typ_danych [ ( rozmiar ) ],nazwa_kolumny                  
typ_danych [ ( rozmiar ) ],...);
 
Juz w trakcie tworzenia tabeli mozemy / musimy ustalic klucze, relacje, typy
danych dla kolumn, nalozyc ograniczenia na kolumny. Jest to o tyle
skomplikowane, gdyz rózne bazy danych maja rózne mozliwosci, pozwalaja
definiowac rózne typy danych a na dodatek istnieja jeszcze pewne subtelne
ograniczenia co do samej funkcji CREATE TABLE (np. miejsce definiowania kluczy,
relacji itd.), o których napisze dalej.
 
Back to
Top


TYPY DANYCH
 
Dobrodziejstwem dzisiejszych silników relacyjnych baz danych
jest mnogosc typów danych mozliwych do zdefiniowania. I nie chodzi tu tylko o
prostote pisania programów, ale glównie o oszczednosc pamieci poprzez mozliwosc
dokladnego zdefiniowania rozmiaru danej oraz o sposób ich interpretacji
(mozliwosc sortowania ciagów znaków, porównywanie dat itd.).
Ogólnie mozna wyróznic cztery rodzaje typów danych:
Dane Lancuchowe
Mamy tu dwa glówne typy CHAR( ) i VARCHAR ( ).
CHAR( ) jest typem o ustalonej dlugosci. Oznacza to, ze
definicja CHAR(20), naklada na kolumne obowiazek przechowywania ciagu znaków o
dlugosci 20 – nawet jezeli uzytkownik nic nie wprowadzi do rekordu. Ten typ
czesto wykorzystuje sie w kolumnach przechowujacych informacje o znanych (i
stosunkowo niezmiennych) dlugosciach jak np. NIP, PESEL, nr dowodu osobistego,
kod pocztowy, plec.
VARCHAR( ) (w ORACLE jeszcze VARCHAR2 ( )) przechowuje ciag
znaków o zmiennej dlugosci. Oznacza to, ze definicja VARCHAR (140), naklada na
kolumne maksymalna dlugosc znaków jaki ta moze przyjac. Jezeli uzytkownik do
takiego rekordu wpisze swoje imie np. Bonifacy to pole to bedzie zajmowalo w
pamieci tylko 8 bajtów.
Z reguly typy te maja ograniczony zasieg do 255 znaków, ale
np. w ORACLE jest to 2000, a VARCHAR2 ( ) – 4000 znaków.
Istnieja jeszcze inne typy jak np. CLOB, TEXT, MEDIUMTEXT,
które pozwalaja na wprowadzenie do 2 GB tekstu.
W przypadku tworzenia zapytan z wykorzystaniem konkretnych
danych typu lancuchowego, musimy je brac w znak pojedynczego cudzyslowia.
 
Dane Numeryczne
Tu róznorodnosc typów jest bardzo duza. Najczesciej sa one
podzielone na typy calkowite i zmiennoprzecinkowe, które z kolei dalej dziela
sie ze wzgledu na rozmiar i dokladnosc.
Najogólnieszy podzial tych typów wyglada nastepujaco:
DECIMAL – liczba zmiennoprzecinkowa;
FLOAT - liczba zmiennoprzecinkowa;
INTEGER (rozmiar) – liczba calkowita o okreslonej
dlugosci;
MONEY – Liczba posiadajaca dwa miejsca dziesietne;
NUMBER – standardowa liczba zmiennoprzecinkowa;
 
Dane okreslajace czas
I tutaj mozna zauwazyc wiele anomalii i podtypów
charakterystycznych dla róznych baz danych. Podstawowymi typami wystepujacymi we
wszystkich silnikach sa:
Data – (DATE) – okresla date
Data i czas (DATETIME) – okresla date i czas
Czas (TIME) – okresla czas
Rok (YEAR) – okresla rok
 
Duze Obiekty
Niektóre nowe systemy baz danych proponuja typy danych, w których mozemy
przechowywac np. rysunki, dzwieki i inne tego typu Duze Obiekty.
 
Back to
Top


OGRANICZENIA DLA
KOLUMN
 
Istnieje wiele funkcji pozwalajacych ograniczyc typ
wprowadzanej informacji do kolumny.
Juz chocby sam klucz glówny – malo tego, ze nie mozemy
wprowadzic dwa razy takiej informacji, to jeszcze bardzo czesto automatycznie
nadawane jest ograniczenie mówiace, ze nie moze byc wprowadzona wartosc
nieokreslona – NOT NULL.
Nie wspomnialem jeszcze wczesniej jak zdefiniowac klucz
kandydujacy. Klucz taki definiujemy poleceniem UNIQUE (nazwa_kolumny), na koncu
deklaracji tabeli, lub w srodku po deklaracji kolumny np.
...Kod CHAR(6) UNIQUE,...
To takze jest ograniczenie, poniewaz kazda wartosc
wprowadzana do kolumny musi byc rózna od wszystkich innych wystepujacych w tej
kolumnie.
 
Z tym ograniczaniem to tak naprawde jest tak, ze w ogóle nie
musimy ich wprowadzac. Najczesciej baze danych tworzymy w celu wykorzystania jej
jako zródla danych w naszym programie, gdzie z powodzeniem mozemy kontrolowac
wprowadzane informacje zakladajac ograniczenia programowe. Jednakze
przeniesienie funkcji kontroli na program bazodanowy z pewnoscia ulatwi nam
pisanie programu, bo dla nas pozostanie tylko wpisanie kodu wylapujacego i
wyswietlajacego wyjatki i bledy a reszta zajmie sie silnik bazy danych.
 
No wiec jak bedzie wygladal kod tworzacy tabele z kilkoma
kluczami:
 
CREATE TABLE Osoby(Id  NUMBER NOT NULL PRIMARY KEY,Imie
VARCHAR (20),Nazwisko VARCHAR (25),Pesel CHAR(11)  UNIQUE,Nip CHAR (13) UNIQUE,Ulica
VARCHAR(30),Miasto VARCHAR(30),)
 
lub
CREATE TABLE Osoby(Id  NUMBER NOT NULL ,Imie VARCHAR
(20),Nazwisko VARCHAR (25),Pesel CHAR(11) ,Nip CHAR (13),Ulica
VARCHAR(30),Miasto VARCHAR(30)PRIMARY KEY (Id)UNIQUE (Pesel,
Nip))
 
a skoro juz tak, to dodajmy jeszcze relacje:
CREATE TABLE Dzieci(Id NUMBER PRIMARY KEY,Imie
VARCHAR (20),Id_rodzica NUMBER REFERENCES Osoby (Id))
 
Wiemy juz (mniej wiecej) jak tworzyc tabele z kluczami
glównymi i kandydujacymi polaczone relacjami.
Poznajmy teraz inne metody nakladania ograniczen na
kolumny.
NOT NULL – nie chodzi tu o zero ! – a o to, ze po takiej
deklaracji rekord nie zostanie dodany do tabeli dopóki czegos do niego nie
wprowadzimy ( zero to tez jest cos);
CHECK – czyli sprawdzaj czy – pozwala na nalozenie warunku na
kolumne np.
...Brutto NUMBER CHECK (Brutto > 0),Suma NUMBER
CHECK (Suma > 1000 AND Suma < 90000),...
w kolumnie Brutto nie bedzie mozna wprowadzic wartosci
>=0, natomiast w kolumnie Suma wartosc bedzie musiala sie zawierac miedzy
1000 a 9000.
Polaczenia AND jeszcze nie tlumaczylem (bedzie pózniej) ale
warto zwrócic uwage , ze mozemy tu wykorzystac wyrazenie BETWEEN – czyli
pomiedzy: 
...Suma NUMBER CHECK ( Suma BETWEEN 1000 AND
90000),...   

DEFAULT – czyli wartosc domyslna i mozna ja wykorzystac
tak:
 
...CREATE TABLE Lata(Id NUMBER PRIMARY
KEY,Wiek NUMBER DEFAULT 25)
, co oznacza ze jezeli nie podamy wieku osoby, to
automatycznie zostanie mu nadany wiek na 25 lat.
 
Mozna tez bardziej skomplikowac ta funkcje:
 
CREATE TABLE Ubiory(Id NUMBER PRIMARY KEY,Kostium
VARCHAR (20) DEFAULT ‘Batman’ CHECK Kostium IN (‘Superman’, ’Batman’, ‘Janosik’,
‘Kloss’))
CHECK ... IN (..., ...,...) oznacza, ze w to pole mozemy
wprowadzic tylko jedna nazwe z zalozonych przez nas.
Jezeli nic nie wprowadzimy w to pole to automatycznie zostanie przyjete, ze
osoba posiada kostium Batmana.
 
Back to
Top


INDEKSY
Przedstawione tu wyrazenia ograniczajace moga przyjmowac
bardzo skomplikowana strukture, co w efekcie moze podniesc niezawodnosc naszej
bazy danych i uproscic proces kontroli programowej. Ale nie ma rózy bez kolców –
trzeba pamietac, ze im warunek bedzie bardziej skomplikowany, tym dluzszy bedzie
czas oczekiwania na odpowiedz. Szczególnie odczuwalne bedzie to w przypadku
laczenia warunków i stosowania podzapytan, o których mowa bedzie w kolejnych
dzialach. Powstaje wiec pytanie, czy istnieje jakis sposób przyspieszenia
przeszukiwania rekordów bazy danych? Tak – istnieje taki sposób i jest nim
zakladanie indeksów na tabele.
Jezeli zalozymy indeks na kolumne (lub kolumny) tabeli, to ta
od tej pory bedzie sie caly czas automatycznie sortowala wedlug zadanego
indeksu. W odpowiednio posortowanej tabeli mozna o wiele szybciej wyszukac
zadana informacje, poniewaz mozemy zmniejszyc pole poszukiwan (okreslic punkt
startu i konca przeszukiwanych informacji). Wada tej metody z kolei jest to, iz
po dodaniu nowego rekordu, za kazdym razem tabela musi sie odpowiednio
posortowac, co spowalnia prace podczas edycji danych.
Indeksy przechowywane sa w strukturach nazwanych B – drzewo
(B – tree), które umozliwiaja szybki dostep do poszukiwanej informacji.
 
Instrukcja tworzenia indeksu wyglada nastepujaco:
CREATE [UNIQUE] INDEX nazwa_indeksu ON nazwa_tablicy (
nazwa_kolumny1, nazwa_kolumny2, ...);
 
Taki indeks moze byc nalozony na juz istniejaca tabele.
Wstawienie wyrazenia UNIQUE spowoduje z kolei nalozenie
ograniczenia zapewniajacego wprowadzanie tylko unikalnych wartosci.
Kiedy kolumny warto indeksowac:

Jezeli w kolumnie znajduje sie wiele róznych wartosci – np. nie oplaca sie
indeksowac kiedy mamy w tabeli 3000 rekordów, natomiast w przewidzianej do
indeksacji kolumnie wystepuja tylko trzy rodzaje wartosci;
Pole jest czesto uzywane w zapytaniach;
Czesto
wykorzystuje sie pole w operacjach zlaczenia. Laczenie tabel poprzez pola
indeksowane znacznie przyspiesza ta operacje.
 
Back to
Top


Copyright © 2002 by JRSRevised: maj 21, 2002 .
Powrót do
poprzedniej strony


Wyszukiwarka

Podobne podstrony:
03 Budowanie bazy danych
BAZY DANYCH Streszczenie z wykładów
Strona polecenia do bazy danych
2004 11 Porównanie serwerów relacyjnych baz danych Open Source [Bazy Danych]
MySQL Mechanizmy wewnętrzne bazy danych
Bazy danych w CAD
Postać normalna (bazy danych) – Wikipedia, wolna encyklopedia
bazy danych
01 Projektowanie relacyjnej bazy danych Czym jest relacyj
2004 05 Rozproszone fraktale [Bazy Danych]
bazy danych projekt infor w projekcie

więcej podobnych podstron