Systemy zarządzania bazą danych

Spis treści

Ogólne pojęcie bazy danych: rekord, pole, klucz, struktura,
tworzenie i aktualizacja bazy danych, bezpieczeństwo i ochrona informacji

Definicje podstawowe

Baza danych

Uporządkowany zbiór danych przechowywanych w urządzeniach pamięciowych systemu komputerowego,
 najczęściej na dyskach magnetycznych..

Zbiór wzajemnie powiązanych ze sobą informacji, przechowywanych w pamięci zewnętrznej komputera,
służących w sposób optymalny jednemu lub wielu zastosowaniom.

Baza danych powinna umożliwić szybki dostęp do dużej ilości informacji,
ich modyfikację a także przeszukiwanie danych spełniających określone warunki.

System zarządzania bazą danych

program zarządzający dostepem do bazy danych

Relacja

podstawowowa forma organizacji danych w bazie - zbiór rekordów (krotek)

Atrybut A - lub pole albo kolumna

rodzaj danych, oznaczany przez A (np. Nazwisko lub Imię lub Wiek).
Z każdym atrybutem jest związany zbiór wartości, np. z atrybutem Wiek związany zbiór liczb z zakresu od 0 do 110,
z atrybutem Nazwisko zbiór łańcuchów znaków (napisów) o długości do 30 znaków.

Domena atrybutu dom(A) lub dziedzina atrybutu

zbiór wszystkich możliwych wartości atrybutu A, np dla atrybutu wiek dopuszczalny zakres 0..110

Schemat relacji R(A1...An)

zbiór wybranych atrybutów A1 ... An
Przykładowy schemat relacji PRACOWNICY: PRACOWNICY(Nazwisko, Imię, Wiek, Pensja)

Krotka t - lub rekord

ciąg wartości jego atrybutów, oznaczany przez t.
Przykładową krotką jest <Kowalski, Jan, 35, 12000>
Krotką t dla danego schematu relacji R(A1..An) nazywamy ciąg wartoości <a1,..,an>, takich że,
a1 należy do dom(A1), ... an należy do dom(An)

Relacja

skończony zbiór krotek (rekordów)
r(A1,...,An) = {<a1,..,an>: a1 (- dom(A1), .. an (- dom(An)}
gdzie r(A1,..,An) jest relacją określoną na schemacie relacji R(A1,...,An)
Przykładową relacją jest
{<Kowalski, Jan, 35, 1200>, <Nowak, Piotr, 36, 2000>, <Zielińska, Anna, 25, 1400>}
Krotki relacji nie są uporządkowane, można zmieniać ich kolejność.

Klucz relacji

taki zbiór identyfikujący relacji, którego żaden podzbiór nie jest zbiorem identyfikujacym relacji

Wyróżnia się klucze proste i złożone.
Klucz jest kluczem prostym, jeśli zbiór identyfikujący relacji jest zbiorem jednoelementowym,
w przeciwnym razie klucz jest złożony.
W ogólności, w relacji można wyróżnić wiele kluczy, które nazywamy kluczami potencjalnymi.
Wybrany klucz spośród kluczy potencjalnych nazywamy kluczem głównym.

Struktura

Dane w bazie danych są wprowadzane i zapamiętywane w formie strukturalnej.
Elementarna struktura w bazie danych nazywa się rekordem (record) lub krotką.
Zbiór informacji, zwany plikiem (file) składa się z rekordów.
Rekord z kolei złożony jest z pól (field) - atrybutów.

Bezpieczeństwo

W bazach wielodostępnych musi być stosowany mechanizm blokowania rekordów
(record locking), polegający na tym, że gdy jeden użytkownik zmienia rekord,
musi on byc zablokowany (do czytania lub modyfikacji) dla innych użytkowników.
Stosowane są też zabezpieczenia w postaci haseł oraz udostępniania dla wybranych
użytkowników tylko określonych pól.

Tablice

najczęstszy zapis relacji - wiersze tablic odpowiadają krotkom, a kolumny atrybutom

Rozróżnia się 2 podstawowe typy baz danych

 

Wprowadzenie, przeznaczenie baz danych

Jednym z najważniejszych zastosowań komputerów są systemy baz danych.
Najogólniej przez bazę danych rozumiemy uporządkowany zbiór danych przechowywancych
w pamieci zewnętrznej komputera
,

a przez system bazy danych - bazę danych wraz ze środkami programowymi umożliwiającymi
operowanie na niej, np. wyszukiwanie i aktualizowanie informacji.

W nowoczesnym przedsiębiorstwie nie można sobie wyobrazić dobrze funkcjonującego przedsiębiorstwa ani biura,
którego działalność mogłaby być prowadzona bez korzystania z systemów baz danych.

Upowszechnienie systemów baz danych było związane z gwałtownym i masowym zastosowaniem mikrokomputerów.
Jest wiele pakietów określanych "mikrokomputerowy system bazy danych".
Spośród nich dużą popularność osiągnął system dBase, np. dBase III firmy Ashton-Tate z USA.
dBase III + jest wielodostępną, sieciową wersją systemu dBase III.
System dBase III reklamowany jako "relacyjna baza danych" jest podobnie jak wiele innych systemem quasi-relacyjnym.
W pełni relacyjna baza danych powinna mieć 20 cech.

U podstaw relacyjnych baz danych leży teoria matematyczna, umożliwiająca zalgorytmizowanie procesu
projektowania baz danych oraz opracowanie języków dostępu do danych,
z których użytkownik określa tylko które dane go interesują, a nie jak do nich dotrzeć.
Standardem w zakresie relacyjnych baz danych jest język SQL.

Gromadzenie danych, a zwłaszcza wyszukiwanie informacji w wielkich zbiorach danych jest pracochłonne i zabiera wiele czasu.
Do tego celu zastosowano komputery, wykorzystując ich możliwości pamiętania dużych ilości informacji i szybkiego ich przetwarzania.
Opracowano specjalne systemy zarządzania bazą danych DBMS - Data Base Menagement Systems.

Pierwotnie do tego celu stosowano duże systemy komputerowe.
Dzięki zastosowaniu mikrokomputerów zaczęto stosować bazy danych powszechnie.
Mogą być używane zarówno do opracowywania katalogów książek w bibliotece, spisów towarów w magazynie, zamówień, pracowników, telefonów, podatników,
klientów, wydatków, rezerwacji miejsc i iinych.


Systemy bazodanowe, relacyjne bazy danych

Systemy zarządzania bazą danych (nazywane w skrócie bazami danych) pozwalają na wprowadzenie
i przechowywanie ich w pamięci (np. na dysku

Realizują one 4 najważniejsze funkcje:

Programy do zarządzania bazami danych powinny umożliwić przede wszystkim:

Dane w bazie danych są wprowadzane i zapamiętywane w formie strukturalnej.
Elementarna struktura w bazie danych nazywa się rekordem (record) lub krotką.
Zbiór informacji, zwany plikiem (file) składa się z rekordów.
Rekord z kolei złożony jest z pól (field) - atrybutów.

Przykład rekordu bazy danych w dBASE

NAZWA_TOWA

TYP_TOWARU

CENA_TOWAR

ILOSC_TOWA

DATA_DOSTA

DATA_WAZN

PRODUCENT

JABŁKA

JONATHAN

120.00

68.00

02/05/87

02/15/87

FARMA 1

Pola w tej bazie to m.in. NAZWA_TOWA, TYP_TOWARU, itd.

Jak przebiega praca z bazą danych

Systemy zarządzania bazą dancych są zwykle programami ogólnego przeznaczenia,
tzn. uzytkownik ma możliwość dostosowanai ich do konfiguracji sprzętu oraz do wymagań danego zastosowania.
Program bazodanowy trzeba najpierw zainstalować.

Dla konkretnej bazy ustala się 

Następnym etapem pracy jest wprowadzenie danych - przypomina to wypełnianie formularzy.

Największą zaletą baz danych jest szybkie wyszukiwanie informacji oraz ich przetwarzanie.

Można np. wybierać tylko rekordy spełniające określone kryteria, np. opisujące towary od konkretnego producenta.
Selekcja może być wielostopniowa, tzn. wśród już wybranych rekordów można określać kolejne kryteria wyboru.
Wybrane rekordy można dalej przetwarzać lub wyświetlać.
Dane mogą być także posortowane, czyli uporządkowane w pewnej kolejności, np. w porządku alfabetycznym wg ustalonego pola.
Wiele systemów pozwala na tworzenie plików indeksowych,
w których są zapisywane informacje o rozmieszczeniu pól i rekordów w bazie danych.
Korzystanie z tych informacji znacznie przyśpiesza późniejsze wyszukiwanie danych.

Informacje zapisane w pliku można automatycznie przetwarzać.
Proste bazy danych pozwalają np. na obliczenie sum elementów z konkretnych pól i wartości średnich.
Złożone systemy mają własne języki programowania, w których można zaprogramować skomplikowane operacje,
wykonywane na zawartosci wybranych rekordów lub pól z tych rekordów.
Można np. obliczyć wartość towarów w sklepie, zmienić ceny towarów itd.
Skomplikowane bazy danych umożliwiają jednoczesne operowanie na wielu plikach i łączenie danych
z różnych plików a nawet równoczesne wykorzystywanie ich przez wielu użytkowników.

Rodzaje baz danych

Bazy danych różnią się między sobą sposobem organizacji zapamiętywanych informacji i zarządzania nimi

Kartotekowe bazy danych - systemy kartotek (flat-file database, card file)

Systemy te są najprostszymi bazami danych. Plik składa się z odrębnych dokumentów o identycznej strukturze lecz o różnej zawartości.
Każdy z tych dokumentów stanowi rekord bazy danych. Plik składa się więc z rekordów
Rekordy mogą być podzielone na pola, które mogą zawierać tekst, liczby, daty oraz formuły,
służące do oblicznia wartosci pola w zależności od wartosci innych pól.
Każdemu polu przypisuje się nazwę. Wszystkie rekordy składają sie z pól o tych samych nazwach i tego samego typu,
ale zawartość pól w poszczególnych rekordach może być różna.
Wszystkie rekordy mają taką samą strukturę i nie są ze sobą powiązane.
Plik przypomina zbiór kartotekę jednakowych formularzy.

Przykładem kartotekowej bazy danych jest zbiór książkowych kart katalogowych.
Każda karta stanowi rekord, a poszczególne pozycje jak autor, tytuł itp. są polami rekordu.

Przykłady programów do obsługi kartotekowych baz danych

Nutshell Information Manager firmy Leading Edge Products.
Program nie stawiał praktycznie ograniczeń na liczbę rekordów, liczbę pól i wielkość pól w rekordach.
Zdefiniowanie bazy polega na podaniu nazw i typu poszczególnych pól. Operacje wykonuje się przez wybór opcji z menu.
Poszczególne pola można dowolnie rozmieszczać na ekranie tworząc różnego rodzaju formularze.
Do określenia formy wydruku raportu służą formularze (szablony) wydruku, definiowane na ekranie.
Program służył m.in. do obsługi katalogów, list płac, kartotek personalnych w zakładzie pracy, kartotek pacjentów w szpitalach.
Wadą jest brak możliwości przeglądania raportu na ekranie przed jego wydrukiem.

Reflex firmy Borland International - pozwala w różnych przekrojach analizować bazę danych
reprezentowaną przez tablicę oraz przedstawić wyniki w postaci wykresów.

Kartoteka (Cardfile) z grupy Akcesoria Windows 3.1x. Służy do prowadzenia prostej kartotekowej bazy danych.
Użytkownik tworzy bazę danych składającą się z kart (rekordów) o 2 polach: pola nagłówka (indeksu) i pola informacji.
Zawartości tych pól w bazie są na ogół różne, ale ich rozmiary są dla wszystkich kart jednakowe.
W polu informacyjnym może znajdować się zarówno tekst jak i grafika.
Mogą tu być skopiowane, wbudowane lub dołączane dowolne obiekty OLE.
Do pola nagłówka (na rys. 1 lub 2) dostajemy się przez podwójne kliknięcie myszą na tym polu lub przez Edycja/Indeks.
Pole informacyjne dostępne jest przez jedne kliknięcie myszą w jego obrębie.
Poruszanie się po kartotece umożliwia np. kliknięcie na wystającym brzegu karty lub naciskanie
na poziomą strzałkę w prawo (do przodu) lub lewo (wstecz).
Dłuższe przytrzymanie strzałki powoduje szybkie przewijanie kart. W polu informacyjnym mozna pisać teksty lub rysować/wstawiać rysunki.
Włączanie trybu tekstowego (domyślny) przez Edycja/Tekst, a trybu Rysunek przez Edycja/Rysunek.

 

TIG

Inne znane kiedyś systemy kartotek:

Nazwa

Producent

Sprzęt

System operayjny.

max liczba znakóww polu

max liczba pól w rekordzie

max liczba rekordów w pliku

max liczba otwartych plików

rekord o stałej lub zmiennej długości

menu lub polecenia

organizacja indeksu

Masterfile

Campbell

ZX Spektrum

system ZX Spectrum

128

26

ograniczona PaO (ok. 200)

1

stałej

menu

nie ma

DBMAster v.4+

Stoneware Inc.

Apple

DOS 3.0

100

100

nieograniczona

1

stałej

-

ISAM

Supebase 64

Precision Software

Commodore 64

system Commodore 64

1108

127

nieograniczona

1

stałej

-

B-drzewa

Omnifile

SSR Corp.

IBM PC XT, 2 FD

DOS

1828

64

nieograniczona

1

zmiennej

-

zmodyfikowane B-drzewa

 

Relacyjne bazy danych

W relacyjnych bazach danych wykorzystano teorię algebry relacji.
Pliki składają się z rekordów, zaś rekordy z pól ale różnica w stosunku do baz kartotekowych polega na tym,
że baza może zawierać kilka plików (lub tabel),

które to pliki (tabele) różnią się strukturą rekordów.
Pomiędzy rekordami jest określona pewna relacja porządkująca.
Możliwe jest łączenie rekordów z różnych plików, jeśli rekordy takie mają przynajmniej jedno pole wspólne.

Jeśli mamy jedną lub więcej baz zawierających przynajmniej jedno wspólne pole,
wówczas może zachodzić potrzeba utworzenia nowej bazy zawierającej połączone informacje
lub wydrukowania raportu z połączonymi informacjami.
Przykładowo może to dotyczyć informacji o stażu pracy z kartoteki personalnej i wynagrodzeniu z listy płac.
Wspólnym polem może być nazwisko lub nr pracownika
Innym przykłądem może byc baza danych prowadzona z księgowości i baza prowadzona w magazynie,
gdzie wspólnym polem jest nazwa (lub indeks) zakupionych i magazynowanych materiałów.

Takie bazy nazywamy relacyjnymi.
W uproszczeniu można je przedstawić za pomocą tablic (nazywanych relacjami) powiązanych między sobą
poprzez kolumny, w których występują wspólne dane.
Odszukanie określonego rekordu (wiersza) w jednej tablicy pozwala poprzez kolumny
awierające wspólne dane wybrać odpowiedni rekord drugiej tablicy.
Jedną dużą bazę można podzielić na mniejsze, a następnie łączyć informacje w miarę potrzeby.
Bazy relacyjne są bazami wieloplikowymi lub wielotabelowymi.
Programy zarządzania relacyjnymi bazami danych zawierają zbiór rozkazów, które umożliwiają wykonywanie operacji na całej bazie.

Zaletą relacyjnych baz danych jest uniezależnienie formy wprowadzania informacji od sposobu ich użytkowania.
Bazy pozwalają bowiem na zmiany struktury rekordu.

Do programów zarządzania relacyjnymi bazami danych należą m.in. programy serii dBASE
(w różnych odmianach: dBase III+, dBase IV, Foxbase oraz różne wersje języka Clipper)

Inne typy (struktury) baz danych

Pojęcia podstawowe

System bazy danych składa się z bazy danych i systemu zarządzania bazą danych.
Baza danych jest to uporządkowany zbiór danych przechowywanych w urządzeniach pamięciowych
systemu komputerowego, najczęściej na dyskach magnetycznych.

System zarzadzania bazą danych jest programem zarzadzajacym dostępem do bazy danych.

Podstawową formą organizacji danych w bazie jest relacja.
Rodzaj danych (np. Nazwisko, Wiek, Pensja) w teorii relacyjnch baz danych nazywa się atrybutem i jest oznaczany przez A.
Z każdym atrybutem jest związany zbiór dopuszczalnych wartości (np. Wiek - liczby 0..110, Nazwisko - łancuchy znaków o długości do 30).
Zbiór wszystkich możliwych wartości atrybutu A nazywamy jego domeną (dziedziną) i oznaczamy przez dom(A).

Zbiór wybranych atrybutów A1, ..., An nazywamy schematem relacji i oznaczamy R(A1,...,An).
Przykład: schematem relacji PRACOWICY jest PRACOWNICY (Nazwisko, Imię, Wiek, Pensja).

Dla danego schematu relacji ciąg wartości jego atrybutów nazywamy krotką (rekordem) i oznaczamy przez t.
Przykładową krotką jest <Kowalski, Jan, 35, 2000>.
Innymi słowy, dla danego schematu relacji R(A1,...An),
ktotką t nazywamy ciąg wartości <a1,...,an>,
takich, że a1 (- dom(A1,..., an (- dom(An)

Relacją określoną na danym schemacie relacji nazywamy skończony zbiór krotek (rekordów).
Formalnie
r(A1,..,An) = {<a1,...,an>: a1(-dom(A1),..an(-dom(An)}, gdzie r(A1,...,An) jest relacją określoną na schemacie relacji R(A1,...,An).
Przykładową relacją jest {<Kowalski, Jan, 35, 2000>, <Nowak, Piotr, 36, 1500>, <Zielińska, Anna, 25, 1000<}.

Krotki relacji nie są uporządkowane. Można dowolnie zmieniać kolejność krotek, bez zmiany relacji.
Z matematycznego punktu widzenia przestawienie atrybutów powoduje zmianę relacji.
W wielu systemach danych, również w dBase III, pomija się to ograniczenie i przyjmuje, że uporządkowanie atrybutów nie jest znaczące.

Najczęściej relacje reprezentuje się w postaci tablic, których wiersze odpowiadają krotkom (rekordom), a kolumny atrybutom (polom).

Przykładowa relacja w postaci tablicy

Nazwisko

Imię

Wiek

Pensja

Kowalski

Jan

35

2000

Nowak

Piotr

36

1500

Zielińska

Anna

25

1000

Operacje relacyjne

Na 3 pierwszych operacjach: selekcji, projekcji i połączeniu opiera się tzw. język manipulowania danymi,
umożliwiający użytkownikom baz danych dokonywanie przekształceń relacji, wynikających z potrzeb.

Zazwyczaj użytkownicy żądają dostępu do innych relacji niż te, które są przechowywane.
Zrealizowanie takiego żądania wymaga przekształcenia relacji przechowywanych w bazie danych w relacje określone w żądaniu. 

Tak utworzone relacje mogą być "pionowymi" lub "poziomymi" podzbiorami innych relacji,
tzn. relacjami powstałymi przez usunięcie niektórych atrybutów lub krotek,
bądź mogą być wynikiem połączenia różnych relacji w jedną.

Operacja projekcji

Operacją projekcji relacji r(A1,...,An) na zbiorze atrybutów X=(Ai,..,Aj), co zapisujemy Px r(A1,...,An),
nazywamy przekształcenie relacji r(A1,...,An) w relację wynikową postaci:
Px r(A1,...,An) = {t[X] : t(- r(A1,...,An)}

Operacja projekcji umożliwia utworzenie "pionowego" podzbioru relacji przez wybór określonych atrybutów (pól).

Relacja KIEROWNICY_DZIALOW

Id_Kierownika

Nazwisko

Id_Dzialu

Zarobki

Adres_Dzialu

1

Wałecki

1

2500

Poznań, ul. Strzelecka 5

2

Kościański

2

1800

Pniewy, ul. Prosta 3

6

Pietras

3

2300

Poznań, ul. Kórnicka 30

Wynik operacji projekcji PId_Kierownika, Nazwisko, Zarobki KIEROWNICY_DZIALOW:

Wynik projekcji relacji KIEROWNICY_DZIALOW

Id_Kierownika

Nazwisko

Zarobki

1

Wałecki

2500

2

Kościański

1800

6

Pietras

2300

W systemach zarządzania danymi operacja ta jest formułowana za pomocą poleceń manipulowania danymi.
Np. w dBasee służą do tego polecenia LIST i DISPLAY.

Operacja selekcji

Operacją selekcji relacji r(A1,...,An) względem kryterium selekcji E, co zapisujemy sEr(A1,...,An),
nazywamy przekształcenie relacji r(A1,...,An) w relację wynikową postaci
sEr(A1,...,An) = {t : t(- r(A1,...,An) i E(t) = prawda}

Operacja selekcji umożliwia utworzenie "poziomego" podzbioru relacji przez wybór krotek (rekordów) spełniających określony warunek.

Wynik operacji selekcji sId_Dzialu <= 3 .AND. Zarobki >= 2000 KIEROWNICY_DZIALOW

Id_Kierownika

Nazwisko

Id_Dzialu

Zarobki

Adres_Dzialu

1

Wałecki

1

2500

Poznań, ul. Strzelecka 5

6

Pietras

3

2300

Poznań, ul. Kórnicka 30

W języku naturalnym można tę operację sformułować następująco:
"Z relacji KIEROWNICY_DZIALOW wybierz informacje o kierownikach tych działów,
których identyfikatory są mniejsze lub równe 3 i zaronbki są większe równe 2000".

Operacja połączenia

Operacja połączenia polega na scaleniu odpowiednich krotek (rekordów) 2 różnych relacji pod warunkiem
spełnienia warunku logicznego
q nałożonego na atrybuty połączeniowe.
Np. może byc operacja połączenia PRACOWNICY
qWYDZIALY, gdzie q ma postać:
Id_Wydzialu = Id_Wydzialu

 

Projektowanie bazy danych

Punktem wyjścia są relacje wymagane przez użytkowników a właściwie informacje zebrane przez projektanta o wymaganych atrybutach bazy danych,
celem jest natomiast zdefiniowanie schematów relacji, które mają być przechowywane w bazie danych.
Trzeba tak zaprojektować rozdział zbioru atrybutów na schematy relacji, aby uzyskać pewne pożądane właściwości bazy danych.
Niewłaściwe zaprojektowanie schematów relacji może byc przyczyną dublowania się danych, ich niespójności i anomalii podczas ich aktualizowania.

W ramach projektowania schematów baz danych, najistotniejszą czynnością jest normalizacja relacji,
czyli doprowadzenie relacji do odpowiedniej postaci normalnej.

Pierwsza postać normalna jest immanentną cechą relacji, gdyż wymagania tej postaci są zawarte w definicji relacji.
Postać normalizacji polega w tym przypadku na doprowadzeniu określonego zbioru danych do postaci relacji. 

Mając bazę danych złożoną z relacji w pierwszej postaci normalnej, jest się narażonym na wszystkie niekorzystne zjawiska wymienione wyżej,
dlatego należy doprowadzić relacje do kolejnych postaci normalnych.

Proces normalizacji polega na odpowiednim podziale relacji na mniejsze, w wyższej postaci normalnej.

Pierwsza postać normalna relacji

Relacja jest w pierwszej postaci normalnej, jeżeli każda wartość atrybutu w każdej krotce tej relacji jest wartością elementarną, czyli nierozkładalną.
Z definicji pierwszej postaci normalnej relacji wynika, że każdemu elementowi relacji znajdującemu się
na przecięciu dowolnej krotki i dowolnego atrybutu odpowiada pojedyncza wartość,
a nie zbiór wartości.

Relacja nieznormalizowana

Nr_Zamow

Id_Dostawcy

Nazwa_Dostawcy

Adres_Dostawcy

Id_Czesci

Nazwa_Czesci

Ilosc

001

300

FSO

Warszawa

53

57

59

gażnik

wał

błotnik

100

50

500

002

400

FSM

Tychy

54

gaźnik

200

 

Relacja znormalizowana

Nr_Zamow

Id_Dostawcy

Nazwa_Dostawcy

Adres_Dostawcy

Id_Czesci

Nazwa_Czesci

Ilosc

001

300

FSO

Warszawa

53

gażnik

100

001

300

FSO

Warszawa

57

wał

50

001

300

FSO

Warszawa

59

błotnik

500

002

400

FSM

Tychy

54

gażnik

200

 

Druga postać normalna

Aby przedstawić 2-gą postać normalną należy wprowadzić kilka pojęć

Zbiór identyfikujący relacji

taki zbiór atrybutów tej relacji, których kombinacje wartości jednoznacznie identyfikują każdą krotkę relacji

Klucz relacji

taki zbiór identyfikujący relacji, którego żaden podzbiór nie jest zbiorem identyfikującym relacji

Wyróżnia się klucze proste i złożone. Klucz jest kluczem prostym, jeśli zbiór identyfikujący relacji jest zbiorem jednoelementowym,
w przeciwnym razie klucz jest złożony.
W ogólności, w relacji można wyróżnić wiele kluczy, które nazywamy kluczami potencjalnymi.
Wybrany klucz spośród kluczy potencjalnych nazywamy kluczem głównym.

Zależność funkcjonalna

Atrybut B relacji r jest funkconalnie zależny od atrybutu A tej relacji, jeśli zawsze każdej wartości a atrybutu A
odpowiada nie więcej niż jedna wartość atrybutu B. Inaczej A identyfikuje B.
Np. Id_Dostawcy jest funkcjonalnie zależny od atrybutu Nr_Zamowienia, gdyż jedno zamówienie
 jest kierowane tylko do jednego dostawcy, a zatem numer zamówienia jednoznacznie określa identyfikator dostawcy.
 Odwrotna zależność nie jest prawdziwa.

Pełna zależność funkcjonalna

Atrybut B relacji r jest w pełni funkcjonalnie zależny od zbioru atrybutów X, jeśli jest funkcjonalnie zależny od niego,
ale nie jest funkcjonalnie zależny od żadnego podzbioru zbioru X.

Druga postać normalna:
Dana relacja jest w drugiej postaci normalnej, jeśli każdy atrybut tej relacji nie wchodzący w skład żadnego klucza
potencjalnego jest w pełni funkcjonalnie zależny od wszystkich kluczy potencjalnych.

W celu uzyskania drugiej postaci normalnej należy podzielić relację na zbiór takich relacji,
których wszystkie atrybuty będą w pełni funkcjonalnie zależne od kluczy.

Przechodnia zależność funkcjonalna

Niech X, Y i Z będą 3 roz łącznymi podzbiorami atrybutów danej relacji. Podzbiór atrybutów Z
jest przechodnio funkcjonalnie zależny od podzbioru atrybutów X, jeśli podzbiór atrybutów Z
jest funkcjonalnie zależny od podzbioru atrybutów Y, podzbiór atrybutów Y jest funkcjonalnie zależny
od podzbioru atrybutów X, natomiast podzbiór atrybutów X nie jest funkcjonalnie zależny od Y lub podzbiór atrybutów Y nie jest funkcjonalnie zależny od Z.

Trzecia postać normalna relacji

Dana relacja jest w trzeciej postaci normalnej, jeśli jest ona w drugiej postaci normalnej
i każdy jej atrybut nie wchodzący w skład żadnego klucza potencjalnego nie jest przechodnio
 funkcjonalnie zależny od żadnego klucza potencjalnego tej relacji.

Aby uzyskać trzecią postać normalną relacji, której atrybuty pozostają w przechodniej zależności funkcjonalnej,
należy podzielić ją na 2 relacje.

Wyróżnia się jeszcze czwartą i piątą postać normalną relacji

 


Baza danych DBASE/Clipper - tworzenie, modyfikowanie, porządkowanie bazy danych

Charakterysyka ogólna dBASE, typy pól

Program bazy danych dBASE firmy Ashton Tate, działajacy na komputerze IBM PC był i jest jeszcze
jednym z najpopularniejszych systemów do zakładania, przechowywania i przetwarzania dużych zbiorów informacji.
System dBASE II został opracowany dla mikrokomputerów 8-bitowych, pracujących z systemem operacyjnym CP/M.
Dużą popularność zdobył potem dBASE III na komputery IBM PC, zwłaszcza dBASE III Plus,
umożliwiający dostęp do plików za pośrednictwem sieci.

System dBASE III umożliwia tworzenie tzw. relacyjnej bazy danych, gdzie podstawowymi składnikami bazy są relacje.
Podejście relacyjne do danych wynika z faktu, że zawartość plików spełniających pewne warunki można traktować
jako relacje matematyczne, do których stosuje się elemantarną teorię relacji.
Każdą relację w systemie bazy danych możemy przedstawić w postaci tablicy zawierającej szereg wierszy podzielonych na określoną liczbę kolumn.
Zamiast określenia relacja używa się często określenia plik bazy danych, wiersze tablicy nazywa się rekordami, a jej kolumny polami.
Pliki bazy danych, zwwierające relacje mają rozszerzenie DBF.

W przypadku dBASE III baze danych może tworzyć wiele plików, przy czym jednocześnie otwartych może byc najwyżej 9. 
Każdy plik składa się z nagłówka, w którym określona jest liczba rekordów i nazwy oraz charakterystyki
pól tworzących rekord, oraz z rekordów zawierających dane.

Każdy rekord w pliku ma te samą strukturę, określoną podczas zakładania pliku bazy danych
 - długość rekordów i pól jest stała, bez względu nadługość zapisywanej informacji.
Typ pola w rekordzie opisuje charakter danej, jaka będzie przechowywana w polu.
System dBASE III akceptuje dane 5 podstawowych typów: dane tekstowe - charakter field, dane liczbowe - numeric field, dane logiczne - logical field,
dane w postaci daty - date field, wskaźnik do tzw. notatki (pola memo).
Notatki zapisuje się do oddzielnego pliku o rozszerzeniu DBT.

Typy pól w DBase

Oznaczenie pola

Typ pola

Długość

Opis

C

znakowe (tekstowe), Charakter

254 znaki
j. Clipper do 32 KB

dowolny ciąg znaków - napisy złożone z liter, cyfr i innych znaków dostepnych na klawiaturze

N

numeryczne (liczbowe), Numeric

19 znaków,
j. Clipper do 30 zn, DBase IV do 20 zn

cyfry, znak + lub -, kropka dziesiętna

L

logiczne, logical

1 znak

1 znak: t, T, y, Y - jeśli prawda lub n, N, f, F jeśli fałsz

D

data, date

8 znaków

data w postaci mm/dd/rr lub w wersji polskiej w postaci rr/mm/dd

M

notatnikowe (opisowe)
memo

10 znaków

wskaźnik do zbioru .DBT

F

numeryczne, float
tylko w DBase IV

20 znaków

liczby zmiennoprzecinkowe, inna reprezentacja wewnętrzna niż w typie N

Liczba rekordów w zbiorze max 1 miliard. Długość rekordu max. 4000 bajtów, max. 128 pól.
W DBase IV max liczba pól w rekordzie 255, dług. rekordu też 4000 bajtów,
w j. Clipper 5.0 mogą wystąpić max. 1024 pola.

W dBase III+ w zbiorze .dbt (memo) treść pola memo wynosi max. 5000 znaków, w dBase IV jest dowolna (ograniczona dostępną pamięcią),
w j. Clipper 5.0 rozmiar pola memo ograniczony jest do 64 KB.

Poza plikami bazy danych, zawierającymi relacje (pliki o rozszerzeniu DBF) i plikami notatek (DBT),
w systemie istnieją inne typy plików, zawierajace informacje wspomagające działanie programu.
Największe znaczenie mają pliki indeksowe o nazwach określonych przez użytkownika i rozszerzeniach NDX.
Pliki o rozszerzeniu MEM zawierają dane i zmienne, trzymane podczas działania programu w pamięci operacyjnej.
Pliki FMT zawierają szablony, wg których wyświetlana jest informacja z bazy na ekranie monitora.
Pliki FRM zawierają schematy tworzenia raportów przez drukarki.

Pliki indeksowe mają za zadanie skrócenie czasu przeszukiwania pliku bazy danych.
Plik indeksowy umożliwia uszeregowanie rekordów wg informacji zawartych w określonym polu.
Założenie pliku indeksowego nie powoduje uporządkowania rekordów w pliku bazy danych (DBF),
lecz jej uporządkowanie w ramach pliku indeksowego (NDX).
W pliku indeksowym umieszcza się zawartość wybranego pola i nr rekordu, w którym znajduje się pole wg kolejności alfabetycznej.
Z plikiem bazy danych może być skojarzonych wiele plików indeksowych, ale równocześnie może być otwartych nie więcej niż 7.

Proces użytkowania bazy danych można podzielić na 2 zasadnicze fazy.
Faza zakładania bazy danych, podczas której należy opisać strukturę rekordów w plikach baz danych,
 a następnie wpisać do plików określoną liczbę danych początkowych
(założyć rekordy - wypełnić ich pola).
Od momentu założenia zaczyna się faza druga, związana z przetwarzaniem i konserwacją informacji zawartych w bazie.

Praca w dBase może odbywac się na 2 sposoby:

W trybie konwersacyjnym, bezpośrednim tzw. trybie z kropką. Kropka jest standardowym znakiem zgłoszenia dBase
i po niej wydaje się polecenia języka dBase, które są natychmiast wykonywane.

W trybie z asystentem - z wykorzystaniem programu pomocniczego (asystenta) o nazwie ASSIST w dBase III+ lub Centrum Sterowania w dBase IV.
W tym trybie użytkownik wybiera odpowiednie pozycje z menu i potwwierdza klawiszem <Enter>.
Program pomocniczy standardowo włączony jest po uruchomieniu dBase, można go także wywołać pisząc polecenie assist lub naciskająć <F2>.


Tworzenie bazy danych

W systemie znakiem zachęty jest kropka. Można wykorzystac opcje menu lub wpisać polecenie po znaku zachęty.

Znajdziemy sie w edytorze struktury, wpisujemy kolejno nazwy pól i ich typ oraz rozmiar.
Typ pola (domyślnie znakowy) zmieniamy spacją. Wprowadzenie potwierdzamy przez <Enter>.
 Po wpisaniu wszystkich pól naciskamy <Ctrl><End>. Pojawi się pytanie: Czy wprowadzić teraz rekordy danych?(T/N)
- tak jest w polskiej wersji dBase III+ Polonus, w angielskiej odpowiednia komenda po angielsku.

 

Wpisujemy kolejno dane kończąc pole naciśnięciem <Enter>. Wejście do pola memo przez <Ctrl><Home>,
wyjście <Ctrl><End>. Po wprowadzeniu danych wszystkich rekordów naciskamy <Ctrl><End> i dane zostaną zapisane do bazy danych.


Przeglądanie bazy danych

Aby obejrzeć dane używamy polecenia list lub jeśli chcemy wypisać rekordy bez numerów to list off.

Można użyć też menu.

W wersji angielskiej dBase III+ :

Retrieve, List

w wersji Polonus: Opracuj, Listuj

 

Jeśli chcemy wydruk na drukarce to dodajemy opcję to print

Można wypisywać tylko wybrane pola z rekordów, np.
list nr, imie, nazwisko, telefon off

 

Gdy interesują nas pewne rekordy spełniające określony warunek, np.osoby o określonym imieniu to wydamy przykładowe polecenia:
list for imie='Andrzej', nr, imie, nazwisko off
list for imie='Andrzej' .or. imie='Konrad' nr, imie, nazwisko off

Można również określic zakres:

Podobne w działaniu jest polecenie display.

Przykłady:

display telefon for nazwisko='Kowalski'

Polecenie browse umożliwia przeglądanie i poprawianie rekordów.
Pisze się komendę browse lub wybiera z menu Update Browse (albo Koryguj Buszuj w Polonus)

Przechodzenie między polami przy użyciu <Home> i <End> a miedzy rekordami klawiszami kursor w górę i w dół.
W ramach pola kursor przesuwamy klawiszami strzałki kursora lewo, prawo.
Jeśli pole nie mieści się na ekranie to ekran można przesuwać <Ctrl>-> lub <Ctrl><-


Modyfikowanie bazy

Często trzeba zmienić rekord bieżący. Stosuje się polecenie locate z parametrem for
locate [<zakres.] [for <warunek>] [while <warunek>]
np. locate for nazwisko="Malicki"
edit

Zmiana rekordu bieżącego jest możliwa poleceniem goto
goto/go [record] <wyrażenie> [bottom/top]
Np.
goto 10

go top
goto bottom

Delete - zaznacza bieżący rekord do skasowania

Pack usuwa fizycznie z bazy danych rekordy zaznaczone do skasowania


Porządkowanie bazy

W celu łatwiejszego odnajdywania rekordów należy je uporządkować. Np. ułożyć w kolejności alfabetycznej wg nazwiska i imienia.
Najlepszą metodą jest indeksowanie bazy wg określonych pól.
Indeksowanie nie zmienia fizycznego ułożenia rekordów, ale tworzy specjalny zbiór indeksowy zawierający
 informacje o logicznej kolejności rekordów. Zbiór indeksowy jest automatycznie modyfikowany (porządkowany)
przy wpisywaniu nowego rekordu (jeśli bazę otworzy się łącznie z odpowiednim plikiem indeksowym).

Plik indeksowy tworzy się poleceniem

index on <wyrażenie> to <plik_indeksowy> [unique]
- tworzy plik indeksowy skojarzony z aktywną bazą danych. Pola kluczowe są układane alfabetycznie,
chronologicznie lub numerycznie (rosnąco). Opcja Unique powoduje pomijanie powtarzających się kluczy
index on nazwa_pola_i[+nazwa_pola_j+..] to nazwa
np.
index on nazwisko+imie to nazw

Aby możliwa była automatyczna zmiana indeksów, bazę należy otwierać poleceniem:

use znajomi index nazw

Wykonanie polecenia:
list nr, imie, nazwisko, telefon off
po indeksowaniu bazy wg pola nazwisko i imie spowoduje wyświetlenie listy posortowanej wg nazwisk i imion w ramach wspólnych nazwisk.

Inną metodą porządkowania jest sortowanie bazy. Jest to czynność pracochłonna polegająca na fizycznej
zmianie kolejności rekordów w pliku bazy danych.
Każde wprowadzenie nowego rekordu powoduje konieczność ponownego posortowania bazy,
z tego względu metoda ta jest mniej popularna i moze być stosowana w odniesieniu do baz o małej liczbie rekordów. 

Do sortowania bazy danych stosuje się polecenie:

sort to nowy_plik on nazwa_pola

Można sortować w porządku rosnącym dodając parametr /A (domyślnie) lub malejącym (/D).

Pełna forma polecenia:
sort to <nowy plik> on <pole1> [/a] [/c] [/d] [, <pole2> [/a] [/c] [/d] ... [<zakres]] [for <warunek.] [while <warunek>]


Tworzenie nalepek

Do tworzenia nalepek stosuje się polecenie

create label plik_z_proj_nalepek

Należy określić rozmiary nalepki, liczby nalepek, odstępy. Gdy chcemy w wierszu umieścić kilka pól łączymy je znakiem "+", np. IMIE+NAZWISKO.

Wydrukowanie nalepek

label form plik_nalepek, np. label form znaj

Jeśli chcemy wydrukować nalepki tylko dla niektórych rekordów, np. osób o imieniu "Anna" to wydamy polecenie:
label form znaj for imie="Anna"


Programowanie baz danych w dBase

System dBase umożliwia pisanie programów na obsługę bazy.
Przykład programu, który na podstawie wprowadzonego imienia i nazwiska sprawdza czy osoba w bazie istnieje
i jeżeli nie to dopisuje nowy rekord automatycznie wypełniając pola imie i nazwisko.
W przeciwnym wypadku umożliwia dokonanie zmian w danych istniejącej osoby.
W przykładzie tworzone są 2 zmienne mimie i mnazwisko, w których przy użyciu poleceń get i read
zapamiętane są dane wprowadzone przez użytkownika. Do przeszukiwania wykorzystano funkcję found().

Program można napisać pod dowolnym edytorem ASCII a można wykorzystać edytor tekstowy bazy poleceniem:
modify command plik_programu
np. modify command dopisz.
Po wpisaniu naciśniecie Ctrl End zapisuje program na dysku, dodając rozszerzenie prg, tutaj dopisz.prg.

set talk off
set bell off
use znajomi
index on nazwisko+imie to nazw
use
use znajomi index nazw
clear
mnazwisko=space(20)
mimie=space(20)
@2,4 say 'Podaj nazwisko'
@2,30 get mnazwisko
@4,4 say 'Podaj imie'
@4,30 get mimie
read
seek mnazwisko+mimie
if .not. found()
append blank
replace nazwisko with mnazwisko
replace imie with mimie
else
edit
endif
set talk on
set bell on

Język bazy danych dBase oferuje m.in. takie konstrukcje programowe jak:

Pętle:

DO WHILE warunek_logiczny
polecenia
ENDDO

Podjęcie decyzji

IF war_logiczny
polecenia
[ELSE]
polecenia
ENDIF

Wybór jednego z wielu

DO CASE
CASE war_log
polecenia
CASE war_log
polec
..
[OTHERWISE]
polecenia
ENDCASE

Uruchomienie programu następuje w linii poleceń:

do plik.prg

np.
do dopisz

 


Inne polecenia dBase

skip [wyrażenie] - przemieszcza się w podanej bazie o podaną liczbę rekordów, np. skip -2, skip 3

recall - zlikwidowanie zaznaczenia do skasowania, recall all - wszystke rekordy

ctod - zamienia napis na datę

pack - usuwa rekordy zaznaczone do skasowania

zap - usuwa wszystkie rekordy, zostawia strukturę bazy

use - zamyka bazę danych z wszystkimi indeksami

Operatory relacji i logiczne

=

równy

<> 

nierówny

> 

większy

>=

nie mniejszy (większy, równy)

< 

mniejszy

<=

nie większy

.not.

nie

.and.

i - koniunkcja

.or.

lub - alternatywa

Przykłady

delete all for NAZWISKO='K'

delete all for nazwisko='K' .or. nazwisko='k'

delete all for srednia_oc>=4

delete all for data_ur>=ctod('06/01/79')

 


Wykorzystanie funkcji języka dBase

W języku dBase operacje wykonuje się na danych z pól oraz na zmiennych pamięciowych.

Przykłady

x=5
y='5'
z=3*x
?x
?y
?z

a='Funkcje'
b='baz danych'
c=' '
d=a+c+b
?d - konkatenacja łańcuchów

Operatory arytmetyczne od najwyższego priorytetu do najmniejszego

() - nawiasy
^ lub ** - potęgowanie
* i / - mnożenie i dzielenie
+ i - - dodawanie i odejmowanie

Wybrane funkcje

? abs(-5)
? int(2.34)
? mod(7,5) - reszta z dzielenia
? sqrt(16) - pierwiastek
? chr(65) - wynik A - zamiana kodu znaku na znak
? asc('A') - znak na nr kodu
? val ('123') - tekst na liczbę
? str(25.345,2) - liczba na tekst
? ctod('05/03/95') - takst na datę
? date() - data
d=date()
? dtoc(d)

Funkcje do napisów
tekst='Ucze sie dBase'
? left(tekst,6)
? right(tekst,5)
? lower('NAUKA')
? upper(tekst)
? len('Ala ma kota')
? ltrim (' utnij spacje')
? replicate('*+',40)

p=space(15)

Daty
d=date()
d1=d+10
d2=d-400
? cdow(d)
? cmonth(d)
? day(d2)
? month(d2)
? year(d2)
? dow(d)
? time()

 


Klawisze funkcyjne dBase

F1

help

pomoc

F2

assist

program asystenta

F3

list

zawartość rekordów otwartej bazy

F4

dr

zbiory *.dbf

F5

display structure

struktura bazy

F6

display status

ustawienia opcji oraz klawisze funkcyjne

F7

display memory

zmienne zadeklarowane

F8

display

zawartość bieżącego rekordu

F9

append

dopisywanie rekordu

F10

edit

modyfikacja bieżącego rekordu


System pomocy - help

Help można uruchomić wpisując polecenie help lub naciskając klawisz funkcyjne F1.
Na ekranie ukaże się odpowiednie menu. Można też uzyskać pomoc na temat dowolnego polecenia pisząc po jego nazwie /?

 


Przyśpieszenie pracy systemu dBase - Clipper

dBase interpretuje polecenia odczytywane z pliku (PRG).
Usprawnieniem jest opracowanie systemów umożliwiających tłumaczenie programów na kod maszynowy procesora - kompilatorów.
Najbardziej znanym programem tłumaczącym programy bazy jest
Clipper Compiler firmy Nantucket.
Dodatkową korzyścią jest to, że nie trzeba posiadać systemu dBase.
Clipper zwiększa ilość plików otwartych do 250, liczba pól w rekordzie ze 128 do 1024,
zmiennych pamięciowych z 256 do 64000. Można definiować własne funkcje