Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Metody zapewnienia integralności danych omówimy na przykładzie bazy obsługującej księgarnię internetową, zapisanej w pliku Ksiegarnia.accdb (dla środowiska Microsoft Access) oraz w pliku Ksiegarnia.odb (dla osób pracujących w programie LibreOffice Base).

Archiwum ZIP z obiema wersjami bazy danych można pobrać tutaj:

RnMKvthfOvHyq

Przycisk zawiera plik ZIP zawierający dwie bazy danych.

Plik ZIP o rozmiarze 37.99 KB w języku polskim

Nasza baza danych składa się z trzech tabel:

  • Klienci – przechowuje dane osób zamawiających książki; kluczem podstawowym jest atrybut idklienta;

  • Ksiazki – zawiera atrybuty modelujące książki; klucz podstawowy tabeli to atrybut idksiazki;

  • Zamowienia – stanowi zestawienie zamówień dokonanych w księgarni internetowej; kluczem podstawowym jest atrybut idzamowienia.

Jeżeli chodzi o powiązania między atrybutami, w bazie istnieją dwie relacje typu „jeden do wielu”:

  • atrybut idklienta (klucz podstawowy) w tabeli Klienci znajduje się w relacji do atrybutu idklienta (klucz obcy) w tabeli Zamowienia;

  • atrybut idksiazki (klucz podstawowy) w tabeli Ksiazki znajduje się w relacji do atrybutu idksiazki (klucz obcy) w tabeli Zamowienia.

Poniżej przedstawiono fragmenty zawierające pierwsze dwa rekordy dla każdej z trzech tabel:

Klienci:

idklienta

imie

nazwisko

nr_tel_kom

ulica

numer_domu

miejscowosc

kod_pocztowy

1

Łukasz

Lewandowski

500101102

Ogrodowa

12A/6

Poznań

60‑004

2

Jan

Nowak

604583454

Wojskowa

144

Katowice

40‑003

Ksiazki:

idksiazki

imieautora

nazwiskoautora

tytul

cena

1

Albert

Camus

Dżuma

19,49

2

Adam

Mickiewicz

Pan Tadeusz

49,99

Zamowienia:

idzamowienia

idklienta

idksiazki

datazamowienia

wyslano

1

2

4

11.02.2020

Tak

2

7

1

06.03.2020

Tak

Omówmy teraz trzy elementarne metody zapewnienia integralności w środowisku Microsoft Access oraz LibreOffice Base. Są to:

  • maski wprowadzania,

  • reguły poprawności,

  • więzy integralności.

Maski wprowadzania

Microsoft Access

W środowisku Microsoft Access Widok projektu umożliwia zdefiniowanie dodatkowej kontroli nad formatem oraz poprawnością informacji wprowadzanych do danego pola. Użytkownik może wybrać odpowiadającą mu maskę wprowadzania narzucającą określoną formę zapisu danych, która obowiązuje w polu.

Zwróćmy uwagę na atrybut o nazwie nr_tel_kom w tabeli Klienci, który przechowuje numer telefonu komórkowego użytkownika księgarni. Dzięki masce możemy wymusić niestandardową formę zapisu numeru telefonu. Może to być np. format: xxx‑xxx‑xxx, gdzie x oznacza cyfrę od 0 do 9.

Podobnie w przypadku atrybutu kod_pocztowy warto ustanowić odpowiednią matrycę wyświetlania i wprowadzania, niech będzie to format: xx‑xxx.

W celu zdefiniowania masek wprowadzania, otwieramy wybraną tabelę i przechodzimy do Widoku projektu. Proces tworzenia dwóch wspomnianych masek wprowadzania przedstawiono w filmie:

RuZyxcNC0oO26
Film‑samouczek cz1: Integralność baz danych, etap II

Ostatecznie maska wprowadzania dla numeru telefonu ma postać: !000\-000\-000;0; zaś dla kodu pocztowego: 00\-000;0;_.

Co oznaczają w takim zapisie poszczególne symbole zastępcze i literałyliterałliterały? Poniżej znajdziemy objaśnienia dla poszczególnych literałów możliwych do użycia w maskach:

Symbol

Przeznaczenie literału

0

cyfra z przedziału 0‑9 (pozycja wymagana)

9

cyfra z przedziału 0‑9 (pozycja niewymagana)

#

cyfra, spacja, znak plus lub minus; jeśli wartość zostanie pominięta, na tej pozycji zostanie wprowadzone puste miejsce (pozycja niewymagana)

L

litera z przedziału A‑Z (pozycja wymagana)

?

litera z przedziału A‑Z (pozycja niewymagana)

A

litera lub cyfra (pozycja wymagana)

a

litera lub cyfra (pozycja niewymagana)

&

dowolny znak lub spacja (pozycja wymagana)

C

dowolny znak lub spacja (pozycja niewymagana)

. , : ; - /

separatory, w tym: dziesiętny, tysięcy, daty i godziny; rodzaj użytego znaku zależy od zdefiniowanych ustawień regionalnych w systemie Windows

\

sprawia, że znak następujący bezpośrednio po tym symbolu zostanie wyświetlony wprost - np. „\-” oznacza znak myślnika

!

powoduje wymuszenie wypełniania maski w kierunku od lewej do prawej strony

<

sprawia, że wszystkie litery występujące po tym symbolu zostają zamienione na małe

>

powoduje, że wszystkie litery występujące po tym symbolu zostają zamienione na wielkie

Zwróćmy także uwagę, że maska wprowadzania zbudowana jest z trzech sekcji, które zostały rozdzielone średnikami:

  • sekcja pierwsza służy do określenia postaci maski (wg literałów podanych w tabeli),

  • sekcja druga może posiadać dwie wartości: 0 (wówczas znaki użyte w masce będą przechowywane w tabeli razem z wprowadzoną wartością) oraz 1 (wówczas w tabeli przechowane zostaną tylko dane wpisane do pola); 1 to wartość domyślna, czyli aktywna w przypadku pozostawienia pustej drugiej sekcji,

  • sekcja trzecia może określić znak wyświetlany na pozycji, na której zamiast żądanego znaku wprowadzono spację.

LibreOffice Base

Aby ustawić dla kolumny nr_tel_kom maskę wprowadzania numeru telefonu komórkowego, najpierw upewniamy się w widoku projektu tabeli, czy wybranym typem danych dla tego atrybutu jest Integer [ INTEGER ].

Następnie w widoku danych tabeli klikamy kolumnę prawym przyciskiem myszy i z menu kontekstowego wskazujemy opcję Formatowanie kolumn:

R1MT5X80eAyas

W oknie Format pola wprowadzamy wybraną maskę, np. taką:

RMvNBir64KsWh

Analogicznie postępujemy w przypadku kodu pocztowego. Najpierw upewniamy się, że wybrano dla tej kolumny typ danych Integer [ INTEGER ]. Następnie w menu kontekstowym wybieramy opcję Formatowanie kolumn:

RYQpfPKN4nqhh

Maskę pasującą do formatu kodu pocztowego wprowadzamy w sekcji Kod formatu:

R1HjfxXisgf0v

Gotowe. Od tego momentu wprowadzane wartości numerów telefonu lub kodu pocztowego będą przyjmować zdefiniowany przez nas format.

Reguły poprawności

W wypadku niektórych atrybutów warto zadbać o dodatkową kontrolę już w momencie wprowadzania lub aktualizowania wartości. Przykładem może być atrybut cena w tabeli Ksiazki. Wprowadzenie ujemnej wartości liczbowej oznaczałoby, że księgarnia ma dopłacić klientom zamawiającym tę książkę. Zdefiniowanie prostej reguły poprawności pomoże uchronić personel obsługujący bazę danych księgarni przed taką sytuacją.

Microsoft Access

Proces ustanawiania reguły poprawności przedstawiono w poniższym filmie:

R1eAqQ95k4FWw
Film‑samouczek cz2: Integralność baz danych, etap II

LibreOffice Base

Aby reguła nieakceptowania ujemnej wartości pola cena była uwzględniania przy wprowadzaniu lub modyfikacji rekordów, należy najpierw stworzyć formularz. Ponieważ będzie on wprost oparty na strukturze tabeli Ksiazki, najwygodniej będzie skorzystać z kreatora:

RTtKxPTRj7fuS

Przenosimy wszystkie pola z tabeli do formularza:

RIBbr7A6UpHIu

Następnie zamykamy formularz i przechodzimy do widoku jego projektu:

RvwNlJdykaAKU

Klikamy prawym przyciskiem myszy na interesujący nas atrybut cena i z menu kontekstowego wybieramy opcję Kolumna...

R6c02Bpfsjrw0

Jak widać, sprawdzenie reguły nieujemnej wartości można zaimplementować w przeznaczonym do tego polu.

Więzy integralności

Jest to ważny rodzaj ograniczeń, które można nałożyć na dane. Więzy integralności zapobiegają powstawaniu rekordów odłączonychrekord odłączonyrekordów odłączonych.

Dla wybranego powiązania można aktywować opcję Wymuszaj więzy integralności, jeśli spełnione są dwa warunki. Pierwszy zakłada, że pozostające w powiązaniu pole tabeli podstawowej jest kluczem podstawowym lub przynajmniej ma unikatowy indeks. Drugi mówi o tym, że pozostające w powiązaniu pola tabeli podstawowej i pokrewnej zawierają ten sam typ danych. Od tej reguły istnieją jednak dwa wyjątki:

  1. pole autonumerowane może być powiązane z polem liczbowym, którego właściwość Rozmiar pola ustawiono na Liczba całkowita długa;

  2. pole autonumerowane, którego właściwość Rozmiar pola ustawiono na Identyfikator replikacji, może być powiązane z polem liczbowym, którego właściwość Rozmiar pola również ustawiono na Identyfikator replikacji.

Tabela podstawowa i pokrewna muszą należeć do tej samej bazy danych lub ewentualnie mogą być tabelami połączonymi w ramach tego samego systemu DBMS.

Konsekwencje włączenia wymuszania więzów integralności dla danego powiązania są następujące:

  • nie można ustawić wartości atrybutu będącego kluczem obcym o takiej wartości, która nie istnieje w żadnym rekordzie w powiązanej tabeli; np. w rekordzie reprezentującym zakup danej książki nie uda się wprowadzić identyfikatora klienta, który nie istnieje w tabeli przechowującej wszystkich użytkowników księgarni;

  • nie można zmienić wartości atrybutu będącego kluczem podstawowym, jeśli istnieją już rekordy powiązane w pozostającej w relacji tabeli; np. w rekordzie reprezentującym klienta księgarni nie uda się zmienić jego identyfikatora, jeżeli osoba ta dokonała już jakiegoś zamówienia.

  • Nie można usunąć wartości atrybutu będącego kluczem podstawowym, jeśli istnieją już rekordy powiązane w pozostającej w relacji tabeli, np. nie uda się usunąć rekordu książki, jeżeli jakiś klient dokonał już zakupu tej pozycji w systemie księgarni.

Słownik

rekord odłączony
rekord odłączony

(zwany także rekordem osieroconym) – rekord w tabeli, w którym istnieje atrybut będący kluczem podstawowym lub obcym, odwołujący się do nieistniejącego rekordu w powiązanej tabeli, np. rekord zamówienia książki, który wskazuje na nieistniejący identyfikator osoby w tabeli z klientami

literał
literał

w programowaniu jest to tzw. jednostka znakowa (lub inaczej: stała dosłowna) reprezentująca w kodzie źródłowym określoną z góry, ustaloną wartość; może to być wartość liczbowa, łańcuchowa lub nawet logiczna; co ważne: wartość ta pozostaje w źródle jednoznaczna – została określona na poziomie składniowym i semantycznym danego języka programowania