Przejdź do treści
ŚredniWaga: 3-6 pkt

Projektowanie Bazy i Relacje

Klucz główny i obcy, typy danych, więzy integralności i normalizacja. Zadanie projektowe wraca na maturze co roku.

Zadanie projektowe wygląda niewinnie: „zaprojektuj bazę przechowującą dane o wypożyczeniach” albo „narysuj schemat relacji”. Punktów jest w nim jednak sporo, bo oceniane są osobno klucze, typy pól, kierunek relacji i to, czy dane nie powtarzają się bez potrzeby. Co ważniejsze, ten sam projekt decyduje o kolejnych podpunktach: źle ustawiona relacja psuje każdą kwerendę, którą na niej zbudujesz.

1. Od czego zacząć: rzeczowniki z treści

Przeczytaj polecenie i wypisz rzeczowniki, które opisują odrębne byty: uczeń, książka, wypożyczenie, kurs, produkt. Każdy z nich to kandydat na tabelę. Cechy tych bytów — nazwisko, tytuł, data, cena — to pola. Czasownik łączący dwa byty („uczeń wypożycza książkę”) to relacja, a często także osobna tabela.

Reguła jednej informacji

Ta sama informacja ma być zapisana w bazie w dokładnie jednym miejscu. Jeśli adres klienta pojawia się przy każdym zamówieniu, projekt jest zły: jedna przeprowadzka wymaga poprawienia setek rekordów, a literówka rozbija tę samą osobę na dwie.

2. Klucz główny

Klucz główny jednoznacznie wskazuje rekord. Nie powtarza się, nigdy nie bywa pusty i nie powinien się zmieniać. Masz dwie drogi:

  • Klucz sztuczny — pole typu Autonumerowanie, bez znaczenia biznesowego. Domyślny wybór, bo zawsze działa.
  • Klucz naturalny — istniejące pole, które z natury jest niepowtarzalne: numer PESEL, kod ISBN, numer seryjny. Używaj go tylko wtedy, gdy masz pewność, że nigdy się nie powtórzy.
  • Klucz złożony — dwa pola razem, typowe w tabeli łączącej: para (ID_ucznia, ID_kursu) występuje tylko raz.

Nazwisko, adres e-mail ani numer telefonu kluczem nie są. Nazwiska się powtarzają, a kontakt bywa pusty albo zmieniany — jedno i drugie łamie definicję klucza i egzaminator to wyłapie.

3. Klucz obcy i strona „wielu”

Klucz obcy to pole przechowujące wartość klucza głównego z innej tabeli. Trafia zawsze do tabeli po stronie „wielu”: jeden klient ma wiele zamówień, więc to zamówienie przechowuje identyfikator klienta, nigdy odwrotnie.

Klienci (1)              Zamowienia (wiele)
ID        <----------    ID_klienta   klucz obcy
Nazwisko                 Numer        klucz glowny
Miasto                   Data
                         Wartosc

Typy muszą się zgadzać. Jeśli klucz główny jest Autonumerowaniem, klucz obcy ustaw jako Liczba, rozmiar: Liczba całkowita długa. Access nie pozwoli utworzyć relacji między liczbą a tekstem i nie powie tego wprost — po prostu odmówi. To najczęstsza przyczyna komunikatu o niezgodności typów w oknie Relacje.

4. Trzy typy relacji

  • Jeden do wielu (1:N) — podstawowy przypadek. Klucz obcy po stronie „wielu”.
  • Jeden do jednego (1:1) — rzadki, stosowany, gdy część danych jest opcjonalna albo chroniona. Klucz obcy jest wtedy dodatkowo indeksowany bez duplikatów.
  • Wiele do wielu (M:N) — nie da się zapisać dwiema tabelami. Uczeń chodzi na wiele kursów, kurs ma wielu uczniów, więc powstaje trzecia tabela z parami identyfikatorów. Jeśli w zadaniu pojawia się „wiele do wielu” bez tabeli łączącej, projekt jest niekompletny.
Uczniowie        Zapisy (tabela laczaca)        Kursy
ID      <----    ID_ucznia                      ID    ----> 
Imie             ID_kursu                       Nazwa
Nazwisko         Data_zapisu                    Cena

Tabela łącząca prawie zawsze przechowuje też własne dane o powiązaniu — datę zapisu, ocenę, liczbę sztuk. To naturalne miejsce na takie informacje i dobry sygnał, że projekt jest poprawny.

5. Typy danych, których wymaga polecenie

  • Tekst krótki — nazwiska, nazwy, kody. Także numer telefonu i kod pocztowy: to nie są liczby, bo nikt ich nie dodaje, a zera wiodące muszą się zachować.
  • Liczba — z rozmiarem dobranym do danych: całkowita długa dla identyfikatorów, podwójna precyzja dla ułamków.
  • Waluta — dla kwot lepsza niż liczba zmiennoprzecinkowa, bo liczy dokładnie i nie gubi groszy.
  • Data/Godzina — nigdy tekst. Data zapisana jako tekst sortuje się alfabetycznie i nie da się od niej odjąć dni.
  • Tak/Nie — dla wartości logicznych zamiast tekstu „tak” i „nie”.
  • Autonumerowanie — wyłącznie dla kluczy głównych.

We właściwościach pola warto jeszcze ustawić to, o co prosi polecenie: Wymagane dla pól, które nie mogą być puste, Indeksowane (bez duplikatów) dla wartości niepowtarzalnych, Reguła poprawności dla ograniczeń typu >=0. Każde z nich bywa osobno punktowane.

6. Więzy integralności i normalizacja po ludzku

W oknie Narzędzia bazy danych → Relacje przeciągasz klucz główny na klucz obcy i zaznaczasz Wymuszaj więzy integralności. Od tej chwili baza nie pozwoli dodać zamówienia dla nieistniejącego klienta ani usunąć klienta, który ma zamówienia. Dwie dodatkowe opcje — kaskadowa aktualizacja i kaskadowe usuwanie — przenoszą zmianę na rekordy powiązane; zaznaczaj je tylko wtedy, gdy polecenie tego wymaga.

Trzy postacie normalne bez teorii
  • Pierwsza — w jednym polu jedna wartość. Nie „matematyka, fizyka” w kolumnie Przedmioty, tylko osobne rekordy.
  • Druga — pole opisuje cały klucz, a nie jego kawałek. W tabeli zapisów nazwa kursu nie ma czego szukać, bo zależy tylko od kursu.
  • Trzecia — pole nie zależy od innego zwykłego pola. Jeśli masz kod pocztowy, nie trzymaj obok niego miasta „na wszelki wypadek”.

Praktyczna konsekwencja: nie przechowuj wartości, które da się wyliczyć. Wartość zamówienia to cena razy ilość — liczy ją kwerenda. Zapisana w tabeli rozjedzie się przy pierwszej zmianie ceny.

7. Schemat na kartce i kontrola przed oddaniem

Gdy polecenie prosi o schemat, narysuj prostokąt na tabelę, wypisz w nim pola, klucz główny podkreśl, a klucz obcy oznacz skrótem. Relację zaznacz linią z opisem 1 i N po właściwych stronach. Czytelny rysunek z podpisanymi typami danych to komplet punktów — ozdobniki nic nie wnoszą.

  • Każda tabela ma klucz główny.
  • Każdy klucz obcy leży po stronie „wielu” i ma typ zgodny z kluczem głównym.
  • Relacja M:N ma tabelę łączącą.
  • Żadna informacja nie powtarza się w dwóch tabelach.
  • Daty są datami, kwoty walutą, telefony tekstem.
  • Nazwy pól bez spacji i polskich znaków — oszczędza to kłopotów w kwerendach.
  • Baza zapisana pod nazwą z polecenia, w formacie, którego wymaga arkusz.
Przeczytaj też
Zadania praktyczne na maturze — jak się przygotować

Plan pracy na 210 minut, kolejność rozwiązywania i format plików wynikowych, na którym najłatwiej stracić punkty.

Korepetycje z informatyki

Zdajesz maturę rozszerzoną z informatyki?

Prowadzimy indywidualne przygotowanie do matury z informatyki — algorytmy, Python i C++, bazy danych i arkusz kalkulacyjny. Zajęcia online, na arkuszach CKE. Zobacz program i cennik.

Zobacz korepetycje z informatyki

Uczysz się w technikum informatycznym? Prowadzimy też przygotowanie do kwalifikacji INF.02, INF.03 i INF.04. Zobacz egzaminy zawodowe →

Nadal czujesz się niepewnie?

To tylko jeden z pewniaków. Na kursie przechodzimy przez nie wszystkie, krok po kroku, aż poczujesz ten spokój.

Pomóżcie mi zdać maturę!