Projektowanie relacyjnej bazy danych

Krok 1

W przedstawionym opisie wymagań Tomek rozpoczął od podkreślenia następujących wyrazów:

  • klienci,

  • produkty,

  • zamówienia,

  • prezenty.

Postępując w ten sposób, zastosował jedną z zasad obowiązujących w procesie projektowania relacyjnej bazy danych. Zgodnie z tą zasadą w opisie funkcjonalnym projektowanej bazy wyróżnił tzw. encjeencjaencje, czyli dające się wyodrębnić obiekty lub zdarzenia, które mogą być opisane za pomocą zestawu cech zwanych atrybutamiatrybutatrybutami.

Ważne!

Każda z wyodrębnionych encji stanowi punkt wyjścia do stworzenia tabeli – podstawowej jednostki budującej relacyjną bazę danych.

Trzy pierwsze tabele Tomek opracował na podstawie istniejącej bazy:

RbSFMGcw7kV9B1
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Ponieważ czwartej tabeli o nazwie Prezenty Tomek nie mógł uzyskać z jakichkolwiek kolumn istniejącej bazy, opisał ją następująco:

Prezenty

nazwa kolumny

opis

KodPrezentu

unikalny numer, pod którym figuruje w bazie dany prezent

NazwaPrezentu

krótka nazwa prezentu, np. Świeca woskowa - choinka

Zdjęcie

plik graficzny lub link do zasobu

LiczbaPunktów

liczba punktów, które klient może wymienić na dany prezent

W ten sposób przedstawił strukturę tabeli jako zestaw atrybutów (kolumn), którym przypisał określone typy danych.

Krok 2

Kolejna zasada projektowania relacyjnych baz danych nakazuje podzielić tabele na kolumny na takim poziomie szczegółowości, który gwarantuje swobodę przeprowadzania podsumowań oraz wyszukiwania danych według potrzebnych kryteriów.

Postępując zgodnie z tą zasadą, Tomek wydzielił w tabeli Klienci następujące kolumny: Imię, Nazwisko, UlicaNr, KodPocztowy oraz Miejscowość. Oprócz tego dodał kolumny:

  • LiczbaPunktów oraz LiczbaZakupów, aby gromadzić dane niezbędne do przyznawania prezentów,

  • Telefon oraz Email w celu poprawienia komunikacji z klientami (przynajmniej z tymi, którzy na taką formę kontaktu wyrażą zgodę),

  • KodKlienta, który posłuży do oznaczenia klienta na konkretnym zamówieniu (zamiast dotychczasowej identyfikacji poprzez imię, nazwisko i adres).

Tabela Klienci uzyskała więc następującą postać:

RJPASsx5WmBG21
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Struktura tabeli Klienci:

Klienci

nazwa kolumny

opis

KodKlienta

unikalny numer, pod którym figuruje w bazie dany klient

Imię

imię klienta

Nazwisko

nazwisko klienta

UlicaNr

ulica i numer w adresie kontaktowym podanym przez klienta, np. Akacjowa 23/2

KodPocztowy

kod pocztowy w formacie 00‑000

Miejscowość

miejscowość w adresie zapisywana obok kodu pocztowego

LiczbaPunktów

liczba punktów zgromadzonych przez klienta za dotychczasowe zakupy

LiczbaZakupów

liczba dokonanych zakupów w sklepie przez klienta

Telefon

numer telefonu kontaktowego do klienta

Email

podany przez klienta kontaktowy adres e‑mail

Tabela Produkty:

RN6ww0uToUR3n1
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Struktura tabeli Produkty:

Produkty

nazwa kolumny

opis

KodProduktu

unikalny numer, pod którym figuruje w bazie dany produkt

NazwaProduktu

krótka nazwa produktu, np. Miód rzepakowy

Pojemność

liczba oznaczająca pojemność produktu wyrażona w litrach

CenaZaSztukę

cena za jedną sztukę produktu wyrażona w PLN

LiczbaSztukDoSprzedania

ile sztuk danego produktu jest aktualnie dostępnych w sprzedaży

Tabela Zamówienia:

R1BQ71HfQwkQ01
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Struktura tabeli Zamówienia:

Zamówienia

nazwa kolumny

opis

KodZamówienia

unikalny numer, pod którym figuruje w bazie określone zamówienie

KodKlienta

unikalny numer, pod którym figuruje w bazie dany klient

KodProduktu

unikalny numer, pod którym figuruje w bazie określony produkt

LiczbaSztuk

liczba sztuk zamówionego przez klienta produktu

Należność

cena, jaką klient musi zapłacić za zamówione produkty

DataZamówienia

data złożenia zamówienia

Ważne!

Zwróć uwagę, że dzięki uwzględnieniu w projektach tabeli Klienci pola KodKlienta oraz w tabeli Produkty pola Kod Produktu w pojedynczym wierszu tabeli Zamówienia zamiast pełnej informacji o kliencie i o produkcie wystąpią dwie liczby, które jednoznacznie określają, kto i jakiego zakupu dokonał. To ogromny zysk, ponieważ nie musimy powielać danych raz wpisanych do bazy. Minimalizujemy również ryzyko popełnienia błędu podczas aktualizacji danych, ponieważ zmiana dokonana w jednym miejscu zostaje uwzględniona we wszystkich wystąpieniach tej danej w całej bazie.

Krok 3

W kroku tym należy przemyśleć, czy w którejkolwiek z tabel występują kolumny zawierające wartości, które można wyliczyć na podstawie danych przechowywanych w innych kolumnach. Krok ten nie jest obligatoryjny. Należy przeanalizować, czy korzystne jest rezygnowanie z dających się odtworzyć w razie potrzeby kolumn, co z jednej strony oszczędza zasoby pamięci, ale z drugiej – może spowolnić działanie bazy. Przykładem takiej kolumny jest Należność w tabeli Zamówienia, ponieważ wartość ta może być obliczona na podstawie danych z kolumn CenaZaSztukę z tabeli Produkty oraz LiczbaSztuk z tabeli Zamówienia.

RMIQXlsDRJW5h1
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Tomek zdecydował, że kolumna Należność w tabeli Zamówienia pozostanie na swoim miejscu ze względu na możliwość łatwiejszego przeprowadzania podsumowań ze sprzedaży, które będą potrzebne do bieżącego monitorowania sprzedaży. Poza tym, ceny produktów mogą się zmieniać i lepiej, gdy pozostanie informacja o faktycznej kwocie transakcji odnotowanej dla obowiązujących cen produktów.

Ważne!

Przeprowadzony proces wyodrębnienia encji i doprowadzenia bazy do postaci powiązanych ze sobą tabel nazywamy normalizacjąnormalizacja bazy danychnormalizacją.

Po wykonaniu projektu bazy według postawionych na początku wymagań Tomek przyjrzał się jeszcze raz opracowanej strukturze relacyjnej bazy danych i doszedł do wniosku, że… przeoczył pewien szczegół dotyczący odnotowywania sprzedaży, który może znacząco poprawić efektywność niektórych operacji w bazie. Wstrzymał się jednak z naniesieniem poprawki w projekcie bazy, bowiem postanowił najpierw skonsultować to ze zleceniodawcą oraz przyszłymi użytkownikami bazy.

A czy ty domyślasz się, o jaki „szczegół” mogło chodzić Tomkowi?

Słownik

redundancja w bazie danych
redundancja w bazie danych

nadmiarowość, czyli wielokrotne występowanie tych samych danych

relacyjna baza danych
relacyjna baza danych

baza danych, w której dane przechowywane są w postaci wzajemnie powiązanych ze sobą tabel

encja
encja

wyodrębnione obiekty, które można opisać za pomocą pewnych cech (atrybutów), np. klient, zamówienie, produkt

atrybut
atrybut

jednostkowa cecha opisująca encję (inaczej: kolumna tabeli), np. atrybutami tabeli Klienci mogą być: Imię, Nazwisko, Telefon itd.

normalizacja bazy danych
normalizacja bazy danych

doprowadzenie do takiej organizacji danych w bazie, która wyeliminuje powtórzenia danych, a w konsekwencji pozwoli uniknąć tzw. anomalii podczas użytkowania bazy danych