WSTĘP
Model danych służy do przedstawiania struktury danych projektowanego lub istniejącego systemu. Przez strukturę danych rozumiemy typy danych występujących
w systemie, wzajemne powiązania miedzy nimi i ograniczenia na nie nałożone. W zależności od pojęć jakimi są opisywane dane, istnieje wiele modeli:
Modele konceptualne - opisują dane za pomocą pojęć, którymi posługują się użytkownicy. Opis ten jest całkowicie niezależny od rozważań na temat pamięci, efektywności
i szczegółów implementacyjnych.
Modele fizyczne - opisują dane w kategoriach ich przechowywania w pamięci komputera
i nie są zrozumiałe dla użytkownika.
Modele implementacyjne - stanowią grupę pośrednią i operują pojęciami zrozumiałymi dla użytkownika, ale bliżej związanymi z konkretną strukturą logiczną danych w pamięci komputera. Rozróżniamy tu trzy podstawowe modele:
Relacyjny;
Sieciowy
Hierarchiczny.
Najpopularniejszym modelem konceptualnym danych jest model związków obiektów (model ER), którego graficzne przedstawienie - Entity Relationship Diagram (w skrócie ERD) służy do schematycznego przedstawiania struktury danych projektowanego lub istniejącego systemu.
Obiekt, związek, atrybut
Podstawowymi pojęciami modelu ER są: obiekt, związek i atrybut. Obiekt jest pojęciem pierwotnym, jest to coś co istnieje i jest rozróżnialne. Potrafimy odróżnić jeden obiekt od drugiego. Obiekty mogą być rzeczywiste, mogą też być pewnymi pojęciami abstrakcyjnymi. Obiekty maja swoje własności zwane atrybutami. Przykładem może być obiekt KLIENT i jego atrybuty: IMIĘ, NAZWISKO, WIEK. Związki pomiędzy obiektami przedstawiają powiązania w świecie rzeczywistym - na przykład obiekt ZAMÓWIENIE składa się z wielu obiektów POZYCJA ZAMÓWIENIA.
Schematy ERD są przedstawiane w wielu notacjach. Nas będą interesowały dwie z nich: notacja Chena i notacja Martina, zwana inaczej notacją wronich łapek.
Rys.1 Przedstawienie powiązania obiektów w notacji Martina
Rys.2 Przedstawienie powiązania obiektów w notacji Chen'a
Jak można zauważyć w przedstawionych powyżej przykładach obiekty przedstawiane są na schematach za pomocą prostokątów, a powiązania jako linie uzupełnione przez pewne symbole. Oznaczenia te ulegają zmianie w zależności od charakterystyki powiązań. Pełny wykaz symboli przedstawiony został w dodatku A dla notacji Martina i w dodatku B dla notacji Chena.
Rodzaje powiązań
Charakter powiązań miedzy obiektami określają:
arność związku, czyli liczba obiektów biorących udział w związku;
liczebność związku, czyli określenie powiązań między obiektami jako 1:1 (jeden do jeden), 1:M (jeden do wielu), M:N (wiele do wielu);
opcjonalność lub obligatoryjność występowania powiązań.
Rys.3 Przykładowe powiązania pomiędzy obiektami
W przykładzie przedstawionym na rys.3 każda osoba ma dokładnie jeden paszport
i zawsze paszport należy do jednej konkretnej osoby. W drugim przypadku mamy następujące przyporządkowanie: katalog może zawierać wiele plików, natomiast plik należy tylko do jednego katalogu; katalog może istnieć bez żadnego pliku (występowanie pliku opcjonalne), jeżeli zaś występuje plik to musi należeć do konkretnego katalogu (występowanie katalogu obligatoryjne). W trzecim przykładzie: jeden typ wyrobu może występować w wielu magazynach, jak również jeden magazyn może oferować wiele typów wyrobów
i występowanie zarówno obiektu Magazyn jak i obiektu Wyrób jest obligatoryjne. Kolejny przykład to powiązanie pomiędzy książką i czytelnikiem. Czytelnik może wypożyczyć wiele książek i książka może być wypożyczona przez wielu czytelników. Występowanie pewnej pozycji zarówno w obiekcie Czytelnik, jak i w obiekcie Książka nie wymusza występowania odpowiedniej pozycji w drugim z nich dlatego zaznaczona opcjonalność po każdej ze stron.
Etapy projektowania bazy danych (tworzenia schematu ERD)
Wydzielenie zbioru obiektów w systemie wraz z ich atrybutami kluczowymi;
Identyfikacja powiązań bezpośrednich między obiektami (ewentualnie
z wykorzystaniem tablicy krzyżowej) oraz ich rodzaju;
Przekształcenie tablicy krzyżowej powiązań w pojęciowy model danych i identyfikacja pozostałych atrybutów obiektów;
Przekształcanie każdego typu powiązań typu M:N na dwa powiązania typu 1:N
i identyfikacja dodatkowych atrybutów charakterystycznych dla nowo powstałych obiektów;
Sprawdzenie poprawności otrzymanej struktury poprzez porównanie z wymaganiami systemu.
Na przykładzie sytemu obsługi zamówień zostaną pokazane poszczególne etapy tworzenia modelu danych. Założenia modelu są następujące:
Firma ma około 25 tys. klientów;
Każdy klient należy do jednego z 600 rejonów;
Każdy klient jest zaopatrywany z jednego z 20 magazynów;
Klient ma przypisany konkretny magazyn w zależności od rejonu, do którego należy;
Klienci zamawiają towary składając zamówienia;
Jedno zamówienie może dotyczyć wielu wyrobów;
Wyroby znajdują się w magazynach.
Etap 1
Analizując założenia projektowanego systemu określamy zbiór pewnych identyfikatorów, zwykle atrybutów, które w jednoznaczny sposób określają obiekty istniejące w systemie. Na przykład: numer zamówienia, numer klienta, kod wyrobu, kod rejonu, kod magazynu. Znajomość tych identyfikatorów umożliwi nam określenie następujących obiektów: zamówienie, klient, wyrób, rejon, magazyn.
Etap 2
Po wyodrębnieniu obiektów w systemie należy zidentyfikować na podstawie reguł panujących w projektowanym systemie bądź założeń jego dotyczących, bezpośrednie powiązania występujące między nimi. Konieczne jest zbadanie istnienia bezpośrednich powiązań między poszczególnymi obiektami. Sprawdzamy powiązania każdy z każdym. Proces ten upraszcza niekiedy utworzenie tablicy krzyżowej.
Obiekt |
Klient |
Wyrób |
Rejon |
Magazyn |
Zamówienie |
Klient |
|
|
X |
|
X |
Wyrób |
|
|
|
X |
X |
Rejon |
|
|
|
X |
|
Magazyn |
|
|
|
|
|
Zamówienie |
|
|
|
|
|
Rys4. Tablica krzyżowa obiektów w systemie; X oznacza istnienie bezpośredniego powiązania.
Po ustaleniu powiązań należy zbadać ich cechy charakterystyczne: liczebność i opcjonalność. Po przyprowadzeniu analizy przechodzimy do następnego etapu.
Etap 3
Po zidentyfikowaniu obiektów i określeniu powiązań pomiędzy nimi możemy przedstawić wstępny schemat ERD naszego systemu.
Rys.5 Wstępny schemat przykładowego systemu
Etap 4
Jak łatwo zauważyć na rysunku 5 powiązania obiektów Magazyn-Wyrób i Zamówienie-Wyrób są powiązaniami wiele do wielu czyli M:N i muszą zostać rozbite na dwa powiązania typu 1:N przez wprowadzenie dodatkowego obiektu. Po takim przekształceniu nasz schemat wygląda następująco:
Rys.6 Schemat ERD po usunięciu powiązań typu M:N
Każdy z obiektów przedstawiony na schemacie powinien być zdefiniowany, zidentyfikowane muszą być wszystkie atrybuty obiektów.
Etap5
Na koniec należy sprawdzić zgodność naszego modelu z założeniami projektowanego systemu i ustalić czy jest on w stanie spełnić wymagania użytkownika. Jest to weryfikacja ogólna. Szczegółowej weryfikacji dokonuje się w trakcie tworzenia tzw. szkieletów procesów. Podstawą weryfikacji ogólnej modelu są następujące reguły:
Dostęp do danych (atrybutów) danego obiektu jest możliwy, jeżeli znany jest identyfikator obiektu;
Dostęp do atrybutów obiektów podrzędnych w stosunku do danego jeżeli znane są atrybuty dla danego wystąpienia obiektu, możliwy jest dzięki powiązaniom pomiędzy obiektami.
Tworzenie tabel w Delphi
Wraz z Delphi dostarczane są narzędzia wspomagające tworzenie struktur tabel relacyjnych baz danych. Należą do nich Database Desktop i SQL Explorer. Database Desktop pozwala na tworzenie tabel w oparciu o sterowniki dostarczane z pakietem Delphi. Pozwala również na budowanie zapytań SQL, które można później wykorzystać w aplikacji.
Wykorzystanie Database Desktop do tworzenia tabel i zapytań SQL
Database Desktop umożliwia tworzenie tabel standartowych typów baz danych. Utworzenie nowej tabeli realizuje się poprzez wykonanie polecenia menu File|New|Table. Następnie podajemy rodzaj tabeli z listy rozwijalnej okna, które pojawia się jako pierwsze po wykonaniu powyższego polecenia. Po wybraniu określonego typu pojawi się okno dialogowe Create Table.
Po lewej stronie okna znajduje się obszar w którym określa się pola tworzonej tabeli. Dla tabel różnego typu należy następnie w różny sposób zdefiniować typy pól. Każde nowe pole tabeli będziemy określać podając:
Nazwę pola (Field Name),
Typ danych w nim przechowywanych (Type),
Rozmiar pola w zależności od typu (Size).
Pola dla tabel dBase
Przy nazywaniu pól należy stosować się do poniższych zasad:
Nazwa pola może składać się z maksymalnie 10 znaków
Nazwa pola nie może zawierać spacji
Każda nazwa pola musi być unikatowa. W tabeli nie mogą znajdować się dwa pola o tej samej nazwie. Umieszczenie spacji na końcu nazwy pola oraz wpisanie różnych wielkości znaków w nazwie spowoduje, że nazwa pola stanie się unikatowa.
Typy pól
Symbol |
Rozmiar |
Typ |
Opis |
C |
1-254 |
Charakter |
Pole tego typu może zawierac dowolne znaki włączając w to spację. Maksymalnie pole to może przechowywać do 254 znaków. |
F |
1-20 |
Float |
Pole to przechowuje wartości zmiennoprzecinkowe. Ilość miejsc dziesiętnych od 0 do 18. |
N |
1-20 |
Number |
Pole to przechowuje dane numeryczne kodowane w formacie BCD |
D |
|
Date |
Pole typu Date przechowuje datę. Pomyślnie data wyświetlona jest w formacie skróconym. Format daty można zmienić uustalając go w ustawieniach regionalnych systemu. Rozmiar pola data jest zawsze równy 8. |
L |
|
Logical |
Pole zawiera pojedynczy znak wskazujący na wartość logiczną. Pola te przyjmują wartości: T, t, Y, y dla określenia prawdy; F, f, N, n dla określenia fałszu. Rozmiar pola logicznego zawsze równy 1. |
M |
|
M |
Pole to zawiera bloki tekstu za duże do przechowywania jako typ znakowy. Dane pola memo przechowywane są w osobnym pliku. |
Indeksy
Podczas tworzenia indeksu do tabeli dBase Database Desktop tworzy plik, który zawiera zaindeksowane wartości pól wraz z ich korespondującymi numerami rekordów. Database Desktop umożliwia tworzenie plików indeksowych za pomocą opcji DEFINE INDEXES. Po uruchomieniu podajemy pole według którego chcemy indeksować (mówiąc prosto pole według którego chcemy sortować naszą tabelę).
Aliasy
Aliasy zapewniają użytkownikowi dostęp do bazy danych. Można go utworzyć wykorzystując program DatabaseDesktop. Uruchamiając opcję Tools|Alias Manager otwieramy okienko tworzenia aliasu. Wybieramy opcję New i w miejsce nazwy podajemy własną. Zmieniamy ścieżkę dostępu na ścieżkę do katalogu, gdzie są umieszczone nasze tabele i zapisujemy.
Komponenty bazodanowe
Table - zapewnia najszybszy i najprostszy dostęp do tabeli
Podstawowe właściwości komponentu Table:
Exclusive - blokuje daną tabelę dla wyłącznego użytku przez daną aplikację
IndexDefs - zawiera informacje o ondexach tabeli
IndexFieldCount - liczba pól tworzących bieżący klucz
IndexName- służy do wyspecyfikowania indeksu dla tabeli
MasterFields- pole używane do łączności pomiędzy tabelą główną (master) i szczegółową (details)
MasterSource - Wskazanie na komponent DataSource powiązany z tabelą pełniącą rolę tabeli głównej (master dla niniejszej tabeli).
ReadOnly - Określa czy dana tabela jest otwarta tylko do odczytu.
TableName - nazwa tabeli w bazie danych.
DatabaseName- powiązanie do wykorzystywanej bazy danych.
Filter - obsługuje filtry w tabelach bazy danych.
Filtered - zatwierdza wykorzystanie mechanizmu filtrowania.
Query - zapewnia dostęp do tabeli preferowany dla baz danych typu klient serwer.
DataSource - zapewnia mechanizmy służące kojarzeniu komponentów reprezentujących zbiory danych (Table, Query) z komponentami wizualnymi (DbGrid).
DBGrid - komponent wizualny umożliwiający wyświetlenie tabeli bazy danych
DBNavigator - komponent wizualny umożliwiający manipulowanie rekordami bazy danych ( dodanie, kasowanie, przeglądanie).
Właściwości komponentów bazodanowych:
Active
Po ustawieniu na True otwiera zbiór danych po ustawieniu na False zamyka ten zbiór.
AutoCalcFields
Określa czy pola obliczane powinny być obliczane automatycznie.
Bof
Zwraca wartość True jeżeli kursor znajduje się w pierwszym rekordzie
w zbiorze danych i wartość False w przeciwnym wypadku.
CachedUpdates
Przy wartości True wszystkie uaktualnienia są zapisywane wbuforze komputera klienta, aż do momentu całkowitego zakończenia transakcji. Przy wartości False wszelkie zmiany w bazie danych są wykonywane rekord po rekordzie.
CanModify
Określa czy użytkownik może dokonywać edycji danych zbioru danych.
DataSource
Wskazuje komponent DataSource skojarzony ze zbiorem danych.
DatabaseName
Nazwa aktualnie używanej bazy danych (aliasu).
Eof
Zwraca True jeżeli kursor znajduje się na końcu pliku i False w przeciwnym wypadku.
FieldCount
Liczba pól w zbiorze danych. Ze względu na to ,że zbiór danych może mieć charakter dynamiczny, liczba pól może ulegać zmianie pomiędzy kolejnymi wywołaniami.
Fields
Tablica obiektów Tfields zawierająca informację o polach w zbiorze danych.
FieldValues
Zwraca wartość określonego pola w bieżącym rekordzie.
Filter
Wyrażenie określające kryterium, według którego dany rekord zbioru danych jest widoczny dla użytkownika.
Filtered
Określa czy ma zastosowanie filtrowanie rekordów. Przy wartości True zbiór danych jest filtrowany na podstawie właściwości Filter oraz zdarzenia OnFilterRecord. Przy wartości widoczne są wszystkie rekordy zbioru.
FilterOptions
Określa sposób stosowania filtrów.
Found
Informuje o powodzeniu lub niepowodzeniu operacji szukania.
Handle
Określa uchwyt kursora BDE do zbioru danych. Stosowany jest jedynie
w przypadku bezpośrednich odwołań do BDE.
Modified
Określa czy bieżący rekord był modyfikowany czy nie.
RecNo
Zwraca numer bieżącego rekordu w zbiorze danych.
RecordCount
Określa liczbę rekordów w zbiorze danych.
State
Zwraca bieżący stan zbioru danych (dsEdit, dsBrowse, dsInsert).
UpdateObject
Wskazuje komponent TupdateObject używany w przypadku buforowanego uaktualnienia bazy danych.
UpdatePending
Wartość True oznacza, że bufor uaktualnień zawiera zmiany nie wprowadzone jeszcze do bazy danych.
Metody komponentów bazodanowych
Append
Tworzy pusty rekord i dołącza go na końcu zbioru danych.
AppendRecord
Dodaje rekord z wypełnionymi polami danych na końcu zbioru danych i wysyła jego wartość do bazy danych.
ApplayUpdates
Nakazuje bazie danych wprowadzenie wszelkich oczekujących zmian. Zmiany te są dokonywane dopiero w chwili wywoływania funkcji CommitUpdates
Cancel
Anuluje wszelkie zmiany dokonywane w bieżącym rekordzie, o ile nie zostały one wysłane jeszcze do bazy danych.
CancelUpdates
Anuluje wszelkie zmiany oczekujące w buforze.
ClearFields
Czyści zawartość wszystkich pól bieżącego rekordu.
CommitUpdates
Zmusza bazę danych do dokonania wszelkich uaktualnień i czyści bufor uaktualnień.
Close
Zamyka zbiór danych.
Delete
Usuwa bieżący rekord
DisableControls
Dezaktywuje wszelkie komórki wprowadzania związane ze zbiorem danych.
Edit
Wprowadza bieżący rekord w stan edycji.
EnableControls
Udostępnia wszelkie komórki wprowadzania związane ze zbiorem danych.
FetchAll
Pobiera wszelkie rekordy od miejsca wskazanego przez kursor do końca zbioru danych i zapisuje je w sposób lokalny.
FieldByName
Pobiera nazwę pola i zwraca odpowiadający mu wskaźnik klasy Tfield.
FindFirst
Znajduje pierwszy rekord według bieżących kryteriów filtrowania.
FindNext
Znajduje kolejny rekord według bieżących kryteriów filtrowania.
FindLast
Znajduje ostatni rekord według bieżących kryteriów filtrowania.
FindPrior
Znajduje poprzedni rekord według bieżących kryteriów filtrowania.
First
Przesuwa kursor na pierwszy rekord w zbiorze danych.
FreeBookmark
Usuwa zakładkę ustawioną wcześniej przy użyciu funkcji GetBookmark i zwalnia przydzieloną jej pamięć.
GetBookmark
Ustawia zakładkę na bieżącym rekordzie.
GetFieldNames
Wyszukuje listę nazw pól w zbiorze danych.
GotoBookmark
Umieszcza kursor w rekordzie wskazywanym przez określoną zakładkę.
Insert
Wstawia rekord i ustawia dane w tryb edycji.
InsertRecord
Wstawia rekord do zbioru danych i wypełnia jego pola wartościami oraz zapisuje je do bazy danych.
Last
Umieszcza kursor w ostatnim rekordzie w bazie danych.
Locate
Przeszukuje zbiór danych w poszukiwaniu określonego rekordu.
Lookup
Lokalizuje rekord w najszybszy możliwy sposób i zwraca zawarte w nim dane.
MoveBy
Przesuwa kursor o określoną liczbę wierszy.
Next
Przemieszcza kursor do następnego rekordu.
Open
Otwiera zbiór danych.
Post
Zapisuje poddane edycji dane do bazy danych lub bufora modyfikacji.
Prior
Przemieszcza kursor do poprzedniego rekordu.
Refresh
Uaktualnia zbiór danych informacjami z bazy danych
RevertRecord
Jeżeli aktywny jest mechanizm buforowania uaktualnień, cofa zmiany wprowadzone do rekordu, ale nie zapisane jeszcze do bazy danych.
SetFields
Ustawia wartości wszystkich pól w rekordzie
UpdateStatus
Zwraca bieżący status uaktualnienia gdy dostępny jest mechanizm buforowania uaktualnień.
Tworzenie prostej aplikacji obsługi bazy danych w Delphi
Do formularza dodaj komponent Table.
Znajdź właściwość DatabaseName w Inspektorze obiektów i wybierz odpowiednią bazę danych lub wpisz ścieżkę dostępu do swojej.
Znajdź właściwość TableName i wybierz odpowiednią tabelę. W tym miejscu powinna pojawić się lista tabel twojej bazy danych.
Umieść na formularzu komponent DataSource i ustaw jego właściwość DataSet na Table1(tą wartość również możesz wybrać z rozwijanej listy. W ten sposób źródło danych zostanie połączone ze zbiorem danych.
Dodaj do formularza komponent DBGrid i zmień jego właściwość DataSource na DataSource1. W ten sposób wizualny komponent prezentacji zostanie połączony ze źródłem danych i (pośrednio) ze zbiorem danych.
Powróć do komponentu Table i zmień jego włąściowść Active na True.
Dodaj do formularza komponent DBNavigator i zmień jego właściwość DataSource na DataSource1. W ten sposób wizualny komponent manipulacji danymi zostanie połączony ze źródłem danych i (pośrednio) ze zbiorem danych.
Zapisz i uruchom w ten sposób stworzony projekt
Filtry
Aby dokonać operacji filtrowania we właściwości Filter umieszcza się nazwę pola, operator logiczny i wartość. Dodatkowo właściwość Filtered należy ustawić na True. Przykładowo filtr może wyglądać następująco:
Imie = `Jan'
Imie = `Jan' and Nazwisko = `Kowalski'
W wyrażeniach określających filtry można stosować wszystkie operatory relacji oraz operatory logiczne AND, OR, NOT.
Dodatkowy aspekt filtrowania określa właściwość FilterOptions. Jest to właściowość zbiorowa, na którą składają się dwie opcje: foCaseIntensitive i FoPartialCompare. Obecność pierwszej z nich powoduje, że w wyrażeniu filtrującym nie są rozróżniane małe i duże litery. Druga z nich powoduje traktowanie * jako znaku blankietowego bądź nie.
Sortowanie rekordów
Sortowanie rekordów tabeli można w prosty sposób zrealizować wykorzystując wcześniej stworzone pliki indeksowe. Ustawienie właściwości IndexName spowoduje nam odpowiednie uporządkowanie danych w tabeli.
Wyszukiwanie rekordów
Do przeszukiwania zbiorów danych można wykorzystać następujące metody:
FindFirst
FindNext
FindPrior
FindLast
FindKey
GotoKey
Locate
Lookup
Ustawianie relacji master/details
Ustawienie relacji master/detail umożliwia nam wiązanie danych znajdujących się w dwóch tabelach bazy danych. Załóżmy, że mamy tabelę o nazwie klient przechowującą dane o klientach, która jest poindeksowana według nr_klienta oraz tabelę zamówienia zawierającą listę wszystkich zamówień złożonych przez klientów. Ta tabela musi być również poindeksowana według nr_klienta. Tworząc relację master/detail przeglądając tabelę klientów można jednocześnie w drugiej tabeli oglądać złożone przez klienta zamówienia. Aby uzyskać taki efekt należy zdefiniować tabelę Klientów jako Master, natomiast tabelę Zamówień jako Details.
Do formularza dodaj po dwa komponenty Table, DataSource, DBGrid.
Dla Table1 znajdź właściwość DatabaseName w Inspektorze obiektów i wybierz odpowiednią bazę danych lub wpisz ścieżkę dostępu do swojej.
Znajdź właściwość TableName i wybierz odpowiednią tabelę. W tym miejscu powinna pojawić się lista tabel twojej bazy danych.
Dla komponentu DataSource1 ustaw właściwość DataSet na Table1(tą wartość również możesz wybrać z rozwijanej listy. W ten sposób źródło danych zostanie połączone ze zbiorem danych.
Dla komponentu DBGrid1 zmień właściwość DataSource na DataSource1. W ten sposób wizualny komponent prezentacji zostanie połączony ze źródłem danych i (pośrednio) ze zbiorem danych.
Powróć do komponentu Table1 i zmień jego właściowść Active na True.
Dla Table2 znajdź właściwość DatabaseName w Inspektorze obiektów i wybierz odpowiednią bazę danych lub wpisz ścieżkę dostępu do swojej.
Znajdź właściwość TableName i wybierz odpowiednią tabelę. W tym miejscu powinna pojawić się lista tabel twojej bazy danych.
Dla komponentu DataSource2 ustaw właściwość DataSet na Table2(tą wartość również możesz wybrać z rozwijanej listy. W ten sposób źródło danych zostanie połączone ze zbiorem danych.
Dla komponentu DBGrid2 zmień właściwość DataSource na DataSource2. W ten sposób wizualny komponent prezentacji zostanie połączony ze źródłem danych i (pośrednio) ze zbiorem danych.
Powróć do komponentu Table2 i zmień jego właściwość Active na True.
W tym momencie na formularzu mamy wyświetlone dwie niezależne tabele. Ustal, która z nich ma być tabelą główną (master), która natomiast uzupełniającą (details). Dla tabeli uzupełniającej ustaw właściwość MasterSource na DataSource1 lub DataSource2 w zależności od tego, która z tabel jest główną.
Następnie kliknij przycisk wielokropka przy właściwości MasterFields. Zostanie otwarte okno Projektanta Połączeń.
U szczytu okna znajduje się pole listy rozwijanej o nazwie Available Indexes. Wybierz index według którego chcesz łączyć tabele.
W polach obu list powinien pojawić się ten sam index. Wybierz index w każdej z list i kliknij przycisk Add aby utworzyć związek master/detail. Lista pól połączonych pokazuje teraz, że dwie tabele są połączone przez odpowiednie ich pola.
Zamknij okno Projektanta Połączeń klikając OK.
W tabeli głównej powinny zostać wyświetlone wszystkie dane, natomiast tabela uzupełniająca powinna wyświetlać tylko dane dotyczące odpowiedniego rekordu tabeli głównej.
Zapisz i uruchom w ten sposób stworzony projekt
Cel ćwiczenia
Celem ćwiczenia jest zapoznanie się z ideą baz danych, sposobem ich projektowania
i organizacji oraz możliwościami oprogramowania bazy danych w Delphi.
Przebieg ćwiczenia
Po zapoznamiu się z instrukcją utwórz za pomocą pakietu Database Desktop tabele przechowujące dane dla zagadnienia podanego przez prowadzącego.
Utwórz odpowiednie indeksy do tabel.
Stwórz własny alias.
Dla pojedynczej tabeli z wykorzystaniem czterech komponentów bazodanowych: Table, DataSource, DbNavigator, DbGrid stwórz prostą aplikację pozwalającą manipulować danymi.
Przetestuj możliwości sortowania i filtrowania danych w tabeli.
Dla zagadnienia podanego przez prowadzącego utwórz relacje master/details pomiędzy stworzonymi przez siebie tabelami.
1
15