Temat: Integralność Danych w Bazach Danych MySQL
Cel lekcji:
Celem tej lekcji jest zrozumienie podstawowych koncepcji integralności danych w bazach danych, ze szczególnym uwzględnieniem implementacji tych zasad w MySQL. Integralność danych to zasady, które zapewniają, że dane przechowywane w bazie są spójne, wiarygodne i zgodne z założonymi strukturami oraz regułami.
Zakres:
- Integralność encji
- Integralność referencyjna
- Integralność danych
- Integralność biznesowa (logiczna)
1. Integralność Encji
Opis: Integralność encji to zasada, która zapewnia unikalność rekordów w tabeli. Osiąga się ją przez zastosowanie kluczy głównych (ang. primary keys), które identyfikują każdy rekord jednoznacznie.
Przykład: Tworzenie tabeli z kluczem głównym w MySQL:
CREATE TABLE Pracownicy (
pracownik_id INT PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50)
);
2. Integralność Referencyjna
Opis: Integralność referencyjna zapewnia, że relacje między tabelami są spójne. Używa się jej w celu uniknięcia tzw. "sierocych" rekordów, które występują, gdy rekord w tabeli podrzędnej odnosi się do nieistniejącego rekordu w tabeli nadrzędnej. Integralność referencyjną osiąga się przez zastosowanie kluczy obcych (ang. foreign keys).
Przykład: Definicja klucza obcego w MySQL:
CREATE TABLE Zamowienia (
zamowienie_id INT PRIMARY KEY,
klient_id INT,
FOREIGN KEY (klient_id) REFERENCES Klienci(klient_id)
);
Ćwiczenie 2: Utwórz tabelę Zamowienia z kolumnami zamowienie_id, klient_id, gdzie klient_id jest kluczem obcym odnoszącym się do tabeli Klienci. Wprowadź kilka rekordów w tabeli Klienci, a następnie dodaj rekordy w tabeli Zamowienia, używając prawidłowych i nieistniejących wartości klient_id. Sprawdź, jak MySQL wymusza integralność referencyjną.
3. Integralność Danych
Opis: Integralność danych ogranicza wartości, które mogą być zapisane w kolumnach, zgodnie z ich typem danych, ograniczeniami oraz innymi warunkami. W MySQL integralność domeny można ustawić, definiując odpowiednie typy danych (np. INT, VARCHAR) i ograniczenia takie jak NOT NULL, CHECK, UNIQUE.
Przykład: Ograniczenie wartości kolumn w MySQL:
CREATE TABLE Produkty (
produkt_id INT PRIMARY KEY,
nazwa VARCHAR(100) NOT NULL,
cena DECIMAL(10, 2) CHECK (cena > 0)
);
Ćwiczenie 3: Utwórz tabelę Produkty z kolumnami produkt_id, nazwa i cena, gdzie nazwa nie może być pustą wartością (NOT NULL), a cena musi być większa od 0. Spróbuj dodać kilka rekordów, w tym rekordy z pustą nazwą oraz z ceną równą lub mniejszą od 0, i zobacz, jak MySQL reaguje na te dane.
4. Integralność Biznesowa (Logiczna)
Opis: Integralność biznesowa (logiczna) odnosi się do zasad, które wynikają z reguł biznesowych obowiązujących w danej organizacji. W MySQL można implementować takie zasady, używając warunków CHECK, TRIGGER lub wyzwalaczy, które uruchamiają określone akcje lub weryfikują dane przed ich zapisaniem w bazie.
Przykład: Użycie wyzwalacza w MySQL:
CREATE TRIGGER Sprawdzanie_Wiek
BEFORE INSERT ON Pracownicy
FOR EACH ROW
BEGIN
IF NEW.wiek < 18 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Wiek musi być większy niż 18 lat.';
END IF;
END;
Ćwiczenie 4: Utwórz tabelę Pracownicy z kolumnami pracownik_id, imie, nazwisko i wiek. Następnie stwórz wyzwalacz, który sprawdza, czy wiek jest większy lub równy 18. Spróbuj dodać rekordy z wartościami wiek poniżej 18 lat i zaobserwuj reakcję systemu.
Podsumowanie:
Integralność danych w MySQL jest kluczowa dla zapewnienia spójności i poprawności danych w bazie. Używając kluczy głównych, kluczy obcych, ograniczeń i wyzwalaczy, można kontrolować dane i uniemożliwić zapisywanie nieprawidłowych informacji, zapewniając stabilność oraz niezawodność aplikacji i raportów bazujących na tych danych.