1
Microsoft Access i język SQL
Część 1 – DDL
Radosław Brunke
2
Spis treści:
1.
Instrukcja CREATE ........................................................................................................... 3
1.1.
Tworzenie tabel .......................................................................................................... 3
Typy danych Microsoft JetSQL ......................................................................................... 3
Określanie wymogu wprowadzenia danych do pola.......................................................... 4
Tworzenie tabel zawierających klucze............................................................................... 5
Tworzenie relacji pomiędzy tabelami ................................................................................ 5
1.2.
Tworzenie indeksów .................................................................................................. 6
Tworzenie indeksu ............................................................................................................. 7
Tworzenie indeksów specjalnych....................................................................................... 7
2.
Instrukcja ALTER TABLE ................................................................................................ 8
2.1.
Usuwanie kolumn z tabeli .......................................................................................... 8
2.2.
Wstawianie kolumn do tabeli ..................................................................................... 8
2.3.
Modyfikacja kolumn .................................................................................................. 8
Tworzenie kluczy na istniejących polach........................................................................... 8
Zmiana wymuszania wprowadzania wartości dla kolumny............................................... 9
2.4.
Obsługa kluczy i relacji w istniejących tabelach ....................................................... 9
2.5.
Specjalne zastosowania kluczy ................................................................................ 10
3.
Instrukcja DROP .............................................................................................................. 10
3.1.
Usuwanie tabel ......................................................................................................... 10
3.2.
Usuwanie indeksu .................................................................................................... 10
DODATEK A – Spis przykładowych kwerend ....................................................................... 11
DODATEK B – Spis tabel ....................................................................................................... 11
DODATEK C – Spis rysunków ............................................................................................... 11
3
1. Instrukcja CREATE
Za pomocą instrukcji CREATE możliwe jest stworzenie następujących obiektów:
-
tabeli,
-
tabeli powiązanej relacją,
-
indeksu w istniejącej tabeli.
1.1. Tworzenie tabel
Za pomocą DDL możliwe jest stworzenie zarówno pustych tabel jak też i tabel zawierających
pola.
CREATE TABLE Nazwa_tabeli;
CREATE TABLE [Nazwa ze spacjami];
Kwerenda 1 Tworzenie pustej tabeli
CREATE TABLE [Nazwa tabeli] (
[Nazwa kolumny pierwszej] typ_danych,
[Nazwa kolumny drugiej] typ danych,
…
);
Kwerenda 2 Tworzenie tabeli zawierającej kolumny
Typy danych Microsoft JetSQL
W widoku SQL kwerendy obsługiwane są tylko wybrane typy danych, dostępne podczas
tworzenia tabel za pomocą innych narzędzi (kreatora tabel lub narzędzia do projektowania
tabel). Sytuacja ta wynika z ograniczenia tego widoku, polegającego na tym, że umożliwia on
wykorzystanie jedynie metody DAO dostępu do danych. Pozostałe typy danych można
deklarować
w
SQL
jedynie
przez
użycie
języka
VBA
ADO
(CurrentProject.Connection.Execute).
CREATE TABLE Przykład (
Tekst CHAR(50),
Nota MEMO,
Bajt BYTE,
Liczba_całk SMALLINT,
Liczba_całk_długa LONG,
Poj_prec SINGLE,
Podw_prec DOUBLE,
Data_ogólna DATE,
Walutowy CURRENCY,
Autonumerowanie COUNTER,
TakNie YESNO,
ObiektOLE LONGBINARY
)
Kwerenda 3 Przykładowa kwerenda tworząca tabelę z kolumnami wielu typów danych
4
Nazwa typu
Synonimy
Typ danych
Opis dodatkowy
TYPY TEKSTOWE
CHARACTER
STRING,
VARCHAR,
NCHAR
Tekst o długości do 255
znaków
Jako dodatkową opcję dla tego pola można podać
w
nawiasie
długość
łańcucha
np.
CHARACTER(25)
MEMO
LONGTEXT,
LONGCHAR,
NOTE, NTEXT
Nota
Maksymalna wielkośc pola to około 1,07
miliarda znaków (2,14GB)
TYPY NUMERYCZNE
BYTE
TINYINT
Bajt
Zakres: 0 do 255
SMALLINT
SHORT
Liczba całkowita
Zakres: -32768 do 32767
LONG
INTEGER
Liczba całkowita długa
Zakres: –2147483648 do 2147483647
SINGLE
REAL,
IEEESINGLE
Liczba rzeczywista o
pojedynczej precyzji
Zakres dla liczb ujemnych: –3,402823E38 do –
1,401298E–45, dla liczb dodatnich: 1.401298E–
45 do 3.402823E38.
DOUBLE
FLOAT,
IEEEDOUBLE
Liczba rzeczywista o
podwójnej precyzji
Zakres
dla
liczb
ujemnych:
–
1.79769313486231E308
do
–4.94065645841247E–324, dla liczb dodatnich:
1.79769313486231E308
do
4.94065645841247E–324
TYPY ZWIĄZANE Z OKREŚLANIEM CZASU
DATETIME
DATE
Data/godzina
TYPY WALUTOWE
CURRENCY
MONEY
Walutowy
TYPY LOGICZNE
YESNO
BIT
Tak/nie
TYPY ZWIĄZANE Z OLE
BINARY
Liczba dwójkowa
Obiekt o maksymalnej pojemności 164 znaki
(510 bajtów)
LONGBINARY
Obiekt OLE
Obiekt o maksymalnej pojemności 2,14 GB
TYPY SPECJALNE
COUNTER
Autonumerowanie
Jako parametr można tu podać dwie wartości
liczbowe wartość początkową indeksu oraz
wielkość przyrostu kolejnych wartości indeksu
np. COUNTER(100, 10)
GUID
Identyfikator replikacji
Tabela 1 Typy danych oferowane w DAO
Określanie wymogu wprowadzenia danych do pola
Dla każdego z tworzonych pól możemy określić, że może lub nie może ono zawierać wartości
pustych. Robimy to deklarując po nazwie pola instrukcję NULL lub NOT NULL. Aliasem dla
NOT NULL jest słówko UNIQUE:
CREATE TABLE [Dane osobowe](
Imię CHAR(50) NOT NULL,
Nazwisko CHAR(60) NOT NULL,
Pesel CHAR(11) NULL
)
Kwerenda 4 Przykład kwerendy z wymuszeniami wprowadzania wartości do pola
5
Tworzenie tabel zawierających klucze
W ramach tabeli możemy utworzyć pole klucza głównego. Każdy z kluczy głównych
powinien mieć unikalną nazwę – definiowaną oddzielnie bez względu na nazwę pola, która
przechowuje wartości klucza. Klucz tworzymy deklarując słówko kluczowe CONSTRAINT
1
po określeniu typu danych pola klucza
2
. Następnie określamy nazwę klucza – warto przyjąć
zasadę dodawania do nazwy pola przedrostka PK_ i na koniec słów kluczowych PRIMARY
KEY. Nazwę klucza można później wykorzystać do określania relacji między tabelami. Jeśli
projektujemy relacyjną bazy danych warto na końcu wymusić konieczność wprowadzenia
danych NOT NULL, spowoduje to automatyczne utworzenie indeksu dla klucza głównego
w tworzonej tabeli.
CREATE TABLE [Dane osobowe](
IDO INTEGER CONSTRAINT PK_IDO PRIMARY KEY NOT NULL,
Imię CHAR(50) NOT NULL,
Nazwisko CHAR(60) NOT NULL,
Pesel CHAR(11) NULL
)
Kwerenda 5 Przykład kwerendy tworzącej pole klucza głównego w tabeli
Tworzenie relacji pomiędzy tabelami
Za pomocą języka JetSQL możemy już w momencie tworzenia tabeli zadeklarować tworzenie
relacji
3
w bazie danych. Jeżeli mamy w bazie danych utworzoną tabelę (np. tabelę Miasta),
która powiązana jest z inną tabelą za pomocą swojego klucza głównego, możemy utworzyć
tabelę powiązaną relacją (np. tabelę Mieszkańcy) wraz z tą relacją, deklarując istnienie klucza
obcego Foreign Key (przedrostek FK_) z określeniem relacji przy pomocy słówka
REFERENCES.
CREATE TABLE Miasta (
IDMA COUNTER CONSTRAINT PK_IDMA PRIMARY KEY NOT NULL,
Miasto CHAR(40),
[Kod pocztowy] CHAR(6)
)
CREATE TABLE Mieszkańcy (
IDMY COUNTER CONSTRAINT PK_IDMY PRIMARY KEY NOT NULL,
Imię CHAR(30),
Nazwisko CHAR(40),
IDMA INTEGER NOT NULL CONSTRAINT FK_IDMA
REFERENCES Miasta(IDMA)
)
Kwerenda 6 Przykłady kwerend tworzących tabele powiązane relacją
1
Słówko CONSTRAINT możemy pominąć, spowoduje to jednak wygenerowanie losowej nazwy klucza przez
Access co może spowodować późniejsze problemy z oprogramowywaniem bazy danych, na przykład
usuwaniem relacji z poziomu DDL itp.
2
Klucz główny tabeli może być dowolnego typu – musi on jednak spełniać minimum dwa wymogi: nie może
być wartością pustą i musi mieć wartość unikalną w tabeli.
3
JetSQL umożliwia tworzenie wyłącznie relacji jeden do wielu, pomimo tego że Access obsługuje również
relacje jeden do jednego. Aby stworzyć relację jeden do jednego, należy w języku SQL stworzyć relację jeden
do wielu i w widoku relacji zmienić typ relacji bądź zrezygnować z SQL do stworzenia tej relacji.
6
1.2. Tworzenie indeksów
Indeks to zewnętrzna struktura danych (często zapisana w oddzielnym pliku) używana do
organizowania w określony sposób danych w tabelach. Główne zastosowania indeksów:
1. Przyspieszanie wykonywania zapytań
Ponieważ bazy danych są często używane do przechowywania bardzo dużych ilości
informacji, wyszukiwanie informacji w bazie polegające na sekwencyjnym odczytywaniu
kolejnych rekordów byłoby często bardzo czasochłonne. Indeks pozwala na znaczne
przyspieszenie pracy z takimi tabelami jeśli często kieruje się do nich zapytania. Aby
zrozumieć ideę indeksów najlepiej można posłużyć się przykładem bazy danych zawierająca
informacje o książkach z biblioteki. Zwykle indeks tworzony jest zawsze dla pola tabeli
zawierającego wartości klucza głównego – jako pola, które przeznaczone jest do powiązania
bieżącej tabeli z inną za pomocą relacji. Z punktu widzenia DBMS indeksy istnieją dla pól
kluczy po to, aby można było szybko wybierać dane z tabel powiązanych relacjami. Z punktu
widzenia użytkownika (w tym przypadku czytelnika) indeks ten nie ma najmniejszego
znaczenia – mało kto przecież zapamiętałby numery wszystkich książek. Czytelnik byłby
zainteresowany raczej indeksami autorów, słów kluczowych, wydawnictw itp. Dla każdego z
takich pól powinien w tabeli zostać stworzony indeks.
Powyższy przykład sugeruje, że indeksy służą do uzyskiwania informacji, tak jakby były
oddzielnymi bazami zawierającymi tabele danych posortowane lub pogrupowane w określony
sposób. Tak jednak nie jest, dla użytkownika bazy są one niewidoczne: zawierają zbiór tzw.
kluczy i łączników. Klucz to zindeksowana wartość rekordu np. autor książki, łącznik zaś to
numer tego rekordu (lub wiele numerów rekordów) w tabeli bazy danych. Ponieważ pliki
indeksów mają złożoną drzewiastą strukturę możliwe jest szybkie odszukanie żądanych
rekordów poprzez wybranie wartości klucza i przez to odnalezienie powiązanych z nim
numerów rekordów.
IDO
Imię
Nazwisko
Klucz
Łącznik
1
Tomasz Kopczyński
Adam
6
2
Anna
Nowak
Anna
2
3
Radek
Ziober
Radek
3
4
Tomasz Jacek
Radek
5
5
Radek
Nowak
Tomasz 1
6
Adam
Iksiński
Tomasz 4
Rysunek 1 Przykładowa tabela zawierająca dane osobowe oraz indeks imion z tej tabeli
Pomimo tego, że indeksy zwykle znacznie przyspieszają pracę z tabelami nie można
przesadzać z ich tworzeniem, ponieważ DBMS musi poświęcić swój czas na utrzymanie
indeksu w poprawnej postaci, co może skutkować znacznym spadkiem wydajności
wykonywanych zapytań, szczególnie w przypadku gdy komputer na którym umieszczona jest
baza posiada niewiele pamięci operacyjnej i większość operacji wykonywanych jest
w pamięci masowej.
2. Wymuszanie konieczności wprowadzenia wartości w polu rekordu
Zastosowanie to podobne jest do deklaracji NOT NULL podczas deklaracji pola w tabeli.
3. Wymuszanie niepowtarzalności wartości w polach rekordu.
Ponieważ możliwe jest wymuszenie niepowtarzalnych wartości indeksu poprzez jego
deklarację dla jednej lub kilku kolumn możliwe jest wymuszenie niepowtarzalności rekordów
w tych polach.
7
Tworzenie indeksu
Indeks tworzony jest za pomocą polecenia CREATE INDEX, w którym należy określić
nazwę indeksu, nazwę tabeli (po słówku ON) i nazwy jednej lub kilku kolumn dla których ma
zostać stworzony indeks (w nawiasie). Przyjęło się, że nazwa indeksu rozpoczyna się
przedrostkiem IDX_.
CREATE INDEX IDX_IDM
ON Mieszkańcy (IDM)
Kwerenda 7 Przykład kwerendy tworzącej prosty indeks
Pola indeksu sortowane są na dwa sposoby domyślnie rosnąco (ASC) i malejąco (DESC).
Aby wymusić inną niż domyślna kolejność sortowania indeksu należy podać słówko DESC
po nazwie kolumny.
CREATE INDEX IDX_IDM
ON Mieszkańcy (IDM DESC)
Kwerenda 8 Tworzenie prostego indeksu z wymuszeniem kolejności sortowania pól
Tworzenie indeksów specjalnych
Przy tworzeniu indeksu można dodatkowo określić kilka opcji (z użyciem słówka WITH):
PRIMARY – indeks główny. Każda z tabel może zawierać tylko jeden indeks główny, przy
czym domyślnie indeks ten tworzony jest dla pola klucza głównego (gdy tworzymy tabelę
w widoku projektu),
DISALLOW NULL – opcja ta eliminuje puste wartości w polach indeksu,
IGNORE NULL – opcja ta dołącza do indeksu pola o pustych wartościach,
UNIQUE – opcja ta wymusza stworzenie indeksu z wartości unikalnych rekordów pola
indeksu w tabeli.
CREATE INDEX IDX_IDM
ON Mieszkańcy (IDM DESC)
WITH PRIMARY
Kwerenda 9 Tworzenie głównego indeksu w tabeli
Oczywiście klucze indeksu mogą składać się z więcej niż jednej wartości rekordu:
CREATE INDEX IDX_Uczeń
ON Uczniowie([Pierwsze imię], [Drugie imię], Nazwisko)
WITH PRIMARY
Kwerenda 10 Tworzenie indeksu dla więcej niż jednego pola
Opcja DISALLOW NULL zapobiega wstawianiu pustych danych do pól rekordu. Jeżeli
tabela zawiera już dane (zawierające puste pola) stworzenie takiego indeksu może nie być
możliwe.
CREATE INDEX [IDX_Data urodzenia}
ON Uczniowie ([Data urodzenia])
WITH DISALLOW NULL
Kwerenda 11 Tworzenie indeksu z wymuszeniem wprowadzenia wartości do pola
Opcja IGNORE NULL umożliwia stworzenie indeksu dla pól rekordu, zawierających puste
wartości, przy czym wartości puste nie są brane pod uwagę przy tworzeniu indeksu.
CREATE INDEX [IDX_Drugie imię]
ON Uczniowie ([Drugie imię])
WITH IGNORE NULL
Kwerenda 12 Tworzenie indeksu z ignorowaniem wartości pustych rekordów
8
Dodatkowo do opcji PRIMARY, DISALLOW NULL, i IGNORE NULL możliwe jest użycie
słówka UNIQUE, w celu wymuszenia unikalności dodawanych wartości do rekordów.
CREATE UNIQUE INDEX IDX_PESEL
ON Uczniowie (PESEL)
WITH DISALLOW NULL
Kwerenda 13 Tworzenie unikalnego indeksu
2. Instrukcja ALTER TABLE
Za pomocą języka DDL możliwe jest nie tylko dodawanie nowych obiektów ale również ich
modyfikacja.
2.1. Usuwanie kolumn z tabeli
Z tabeli możliwe jest usunięcie kolumny z użyciem klauzuli DROP COLUMN:
ALTER TABLE [Nazwa tabeli]
DROP COLUMN [Nazwa kolumny do usunięcia]
Kolumna musi istnieć w ramach tabeli. W przypadku usuwania kolumn związanych
indeksami lub związanych klauzulą CONSTRAINT najpierw należy usunąć indeks lub klucz.
ALTER TABLE Uczniowie
DROP COLUMN [Drugie imię]
Kwerenda 14 Usuwanie kolumny z tabeli
2.2. Wstawianie kolumn do tabeli
Za pomocą ALTER TABLE można również wstawić dane do istniejącej tabeli.
ALTER TABLE [Nazwa tabeli]
ADD COLUMN [Nazwa kolumny do dodania] typ_danych
ALTER TABLE Uczniowie
ADD COLUMN Zdjęcie LongBinary;
Kwerenda 15 wstawianie kolumny do istniejącej tabeli
2.3. Modyfikacja kolumn
DDL oferuje możliwość zarówno zmieniania całych tabel jak też i pojedynczych kolumn –
możliwe jest więc wymuszenie zmiany typu danych przechowywanych w danej kolumnie bez
utraty jej wartości. Niekiedy, ze względu na wartości przechowywane już w rekordach
zmiana tego typu nie będzie możliwa.
ALTER TABLE Uczniowie
ALTER COLUMN PESEL SINGLE
Kwerenda 16 Modyfikacja kolumny – zmiana typu danych
Tworzenie kluczy na istniejących polach
Modyfikacja typu danych może dotyczyć również stworzenia klucza głównego w polu
istniejącej tabeli.
CREATE TABLE Filmy(
Numer INTEGER,
Tytuł CHAR
)
ALTER TABLE Filmy
ALTER COLUMN Numer COUNTER PRIMARY KEY
Kwerenda 17 Modyfikacja kolumny – tworzenie klucza głównego
9
Oczywiście możliwe jest pełne określenie ograniczenia dla klucza w modyfikowanym polu
modyfikowanej tabeli.
ALTER TABLE Filmy
ALTER COLUMN NUMER COUNTER
CONSTRAINT PK_Filmy PRIMARY KEY NOT NULL
Kwerenda 18 Modyfikacja kolumny – pełna składnia tworzonego klucza
Zmiana wymuszania wprowadzania wartości dla kolumny
Z pomocą języka DDL możliwa jest również zmiana opcji ustawionej dla kolumny
polegającej na wymuszeniu wprowadzenia wartości dla pola.
ALTER TABLE Uczniowie
ALTER COLUMN Imię Char(40) NULL
Kwerenda 19 Modyfikacja kolumny – zmiana wymuszania wprowadzenia wartości
Należy pamiętać jednak o tym, że zmieniając tylko tą opcję należy nadpisać istniejący typ
danych w tym polu.
2.4. Obsługa kluczy i relacji w istniejących tabelach
Instrukcja ALTER TABLE może zostać wykorzystana do stworzenia relacji pomiędzy
istniejącymi tabelami. Polega to na dodaniu pola klucza obcego do tabeli związanej relacją ze
strony „wiele”.
CREATE TABLE Samochody (
IDC COUNTER CONSTRAINT PK_Samochody PRIMARY KEY NOT NULL,
Nazwa TEXT(50),
Kolor LONG
);
CREATE TABLE Kolory (
IDK COUNTER CONSTRAINT PK_Kolory PRIMARY KEY NOT NULL,
[Nazwa koloru] TEXT(50)
)
ALTER TABLE Samochody
ADD CONSTRAINT FK_Kolor FOREIGN KEY (Kolor)
REFERENCES Kolory(IDK)
Kwerenda 20 Przykład kwerendy modyfikującej tabelę w celu utworzenia relacji
W powyższym przykładzie zmodyfikowaliśmy tabelę Samochody poprzez dodanie do niej
klucza obcego FK_Kolor przechowującego wartości w polu Kolor tej tabeli. Dodatkowo
dodaliśmy ograniczenie do tabeli: stworzyliśmy relację z polem IDK tabeli Kolory.
Aby usunąć istniejącą relację z bazy danych wystarczy usunąć klucz obcy z tabeli powiązanej
relacją ze strony wiele.
ALTER TABLE Samochody
DROP CONSTRAINT FK_Kolor
Kwerenda 21 Usuwanie relacji poprzez usunięcie klucza obcego
Oczywiście możliwe jest usunięcie klucza głównego (jeśli nie jest on związany relacją.
ALTER TABLE Kolory
DROP CONSTRAINT PK_Kolory
Kwerenda 22 Usuwanie klucza głównego z tabeli
10
2.5. Specjalne zastosowania kluczy
Słówko CONSTRAINT oznacza ograniczenie lub wymuszenie. Można wykorzystać je w celu
wprowadzenia pewnych restrykcji dla pól w tabeli. Przykładem może być tu wymuszenie
niepowtarzalności dla wybranych pól.
CREATE TABLE [UNIKALNI LUDZIE] (
IMIĘ CHAR(20) NOT NULL,
NAZWISKO CHAR(30) NOT NULL
)
ALTER TABLE [UNIKALNI LUDZIE]
ADD CONSTRAINT [UNIKALNE DANE] UNIQUE (IMIĘ, NAZWISKO)
Kwerenda 23 Wprowadzenie ograniczenia dla danych poprzez modyfikację tabeli
3. Instrukcja DROP
Za pomocą instrukcji DROP możliwe jest usunięcie istniejącego indeksu lub istniejącej tabeli
z bazy danych.
3.1. Usuwanie tabel
DROP TABLE [Nazwa tabeli]
DROP TABLE Uczniowie
Kwerenda 24 Kwerenda usuwająca tabelę
3.2. Usuwanie indeksu
DROP INDEX [Nazwa indeksu]
ON [Nazwa tabeli]
DROP INDEX IDX_Uczeń
ON Uczniowie
Kwerenda 25 Kwerenda usuwająca indeks
11
DODATEK A – Spis przykładowych kwerend
Kwerenda 1 Tworzenie pustej tabeli .......................................................................................... 3
Kwerenda 2 Tworzenie tabeli zawierającej kolumny ................................................................ 3
Kwerenda 3 Przykładowa kwerenda tworząca tabelę z kolumnami wielu typów danych......... 3
Kwerenda 4 Przykład kwerendy z wymuszeniami wprowadzania wartości do pola................. 4
Kwerenda 5 Przykład kwerendy tworzącej pole klucza głównego w tabeli .............................. 5
Kwerenda 6 Przykłady kwerend tworzących tabele powiązane relacją..................................... 5
Kwerenda 7 Przykład kwerendy tworzącej prosty indeks ......................................................... 7
Kwerenda 8 Tworzenie prostego indeksu z wymuszeniem kolejności sortowania pól ............. 7
Kwerenda 9 Tworzenie głównego indeksu w tabeli .................................................................. 7
Kwerenda 10 Tworzenie indeksu dla więcej niż jednego pola .................................................. 7
Kwerenda 11 Tworzenie indeksu z wymuszeniem wprowadzenia wartości do pola ................ 7
Kwerenda 12 Tworzenie indeksu z ignorowaniem wartości pustych rekordów........................ 7
Kwerenda 13 Tworzenie unikalnego indeksu ............................................................................ 8
Kwerenda 15 Usuwanie kolumny z tabeli.................................................................................. 8
Kwerenda 16 wstawianie kolumny do istniejącej tabeli ............................................................ 8
Kwerenda 17 Modyfikacja kolumny – zmiana typu danych...................................................... 8
Kwerenda 18 Modyfikacja kolumny – tworzenie klucza głównego.......................................... 8
Kwerenda 19 Modyfikacja kolumny – pełna składnia tworzonego klucza ............................... 9
Kwerenda 20 Modyfikacja kolumny – zmiana wymuszania wprowadzenia wartości .............. 9
Kwerenda 21 Przykład kwerendy modyfikującej tabelę w celu utworzenia relacji .................. 9
Kwerenda 22 Usuwanie relacji poprzez usunięcie klucza obcego............................................. 9
Kwerenda 23 Usuwanie klucza głównego z tabeli..................................................................... 9
Kwerenda 24 Wprowadzenie ograniczenia dla danych poprzez modyfikację tabeli............... 10
Kwerenda 25 Kwerenda usuwająca tabelę............................................................................... 10
Kwerenda 26 Kwerenda usuwająca indeks .............................................................................. 10
DODATEK B – Spis tabel
Tabela 1 Typy danych oferowane w DAO................................................................................. 4
DODATEK C – Spis rysunków
Rysunek 1 Przykładowa tabela zawierająca dane osobowe oraz indeks imion z tej tabeli........ 6