Przeczytaj
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:
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:
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ły? Poniżej znajdziemy objaśnienia dla poszczególnych literałów możliwych do użycia w maskach:
Symbol | Przeznaczenie literału |
---|---|
| cyfra z przedziału 0‑9 (pozycja wymagana) |
| 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) |
| litera z przedziału A‑Z (pozycja wymagana) |
| litera z przedziału A‑Z (pozycja niewymagana) |
| litera lub cyfra (pozycja wymagana) |
| litera lub cyfra (pozycja niewymagana) |
| dowolny znak lub spacja (pozycja wymagana) |
| 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. „ |
| 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ą) oraz1
(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
:
W oknie Format pola
wprowadzamy wybraną maskę, np. taką:
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
:
Maskę pasującą do formatu kodu pocztowego wprowadzamy w sekcji Kod formatu
:
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:
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:
Przenosimy wszystkie pola z tabeli do formularza:
Następnie zamykamy formularz i przechodzimy do widoku jego projektu:
Klikamy prawym przyciskiem myszy na interesujący nas atrybut cena i z menu kontekstowego wybieramy opcję Kolumna...
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ó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:
pole autonumerowane może być powiązane z polem liczbowym, którego właściwość
Rozmiar pola
ustawiono naLiczba całkowita długa
;pole autonumerowane, którego właściwość
Rozmiar pola
ustawiono naIdentyfikator replikacji
, może być powiązane z polem liczbowym, którego właściwośćRozmiar pola
również ustawiono naIdentyfikator 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
(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
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