Więzy integralności – rozdział 5.7 w E.14 cz.2

Transkrypt

Więzy integralności – rozdział 5.7 w E.14 cz.2
Więzy integralności – rozdział 5.7 w E.14 cz.2
Baza Salon składa się z dwóch tabel połączonych relacją jeden-do-wielu poprzez pole IdKoloru.
Kaskadowe aktualizowanie danych zostało określone w ten sposób, że gdy zmieni się wartość klucza
podstawowego w tabeli Kolory, nastąpi jego aktualizacja w tabeli Auta. Kaskadowe usuwanie danych
zostało ustawione w ten sposób, że gdy nastąpi usunięcie rekordu z tabeli Kolory powiązane z nim
rekordy w tabeli Auta otrzymają wartość NULL w polu IdKoloru, w związku z czym nie dojdzie do
utraty danych, co stałoby się w przypadku ustawienia więzów typu ON DELETE CASCADE. Pierwsza
instrukcja sprawdza czy istnieje już baza Salon, jeżeli tak to ją usuwa i tworzy nową bazę o tej nazwie.
Tabela Kolory
Pola
IdKoloru
Kolor
Atrybuty
int auto_increment not null primary key
varchar(30)
Tabela Auta
Pola
IdSamochodu
Marka
Model
IdKoloru
Atrybuty
int auto_increment not null primary key
varchar(50)
varchar(50)
Int foreign key
1. Utwórz w MySQL Workbench poniższy skrypt:
DROP DATABASE IF EXISTS Salon;
CREATE DATABASE Salon;
USE Salon;
CREATE TABLE Kolory (
IdKoloru INT AUTO_INCREMENT NOT NULL,
Kolor VARCHAR(30),
PRIMARY KEY (IdKoloru)
);
CREATE TABLE Auta(
IdAuta INT AUTO_INCREMENT NOT NULL,
Marka VARCHAR(50),
Model VARCHAR(50),
IdKoloru INT,
PRIMARY KEY (IdAuta),
FOREIGN KEY (IdKoloru) REFERENCES Kolory (IdKoloru)
ON UPDATE CASCADE
ON DELETE SET NULL
);
2. Dopisz do skryptu instrukcje wprowadzające przykładowe dane:
INSERT INTO Kolory VALUES
(NULL,’Czarny’),
(NULL,’Czerwony’),
(NULL,’Srebrny’);
INSERT INTO Auta VALUES
(NULL,’VW’,’Golf’,1),
(NULL,’Honda’,’Accord’,3),
(NULL,’BMW’,’M3’,1),
(NULL,’Alfa Romeo’,’C4’,2),
(NULL,’Fiat’,’126p’,1);
3. Za pomocą wiersza poleceń MySQL podłącz się do bazy Salon i sprawdź zawartość tabel:
4. Sprawdzimy działanie więzów typu ON UPDATE CASCADE. W tym celu zmienimy wartość klucza
podstawowego w tabeli Kolory dla kolory czarnego z 1 na 4. Następnie sprawdzamy zawartość
tabel – kaskadowe aktualizowanie klucza IdKoloru spowodowało również zmianę jego wartość w
tabeli Auta, w związku z czym złączenie tabel jest nadal poprawne (nie zmieniły się kolory
samochodów).
5. Sprawdzimy działanie więzów typu ON DELETE SET NULL. W tym celu usuniemy kolor czerwony.
Następnie sprawdzimy zawartość tabel, okazuje się, że jedyne czerwone auto - Alfa Romeo otrzymała IdKoloru NULL, nie doszło do utraty rekordu w tabeli Auta – Alfa Romeo C4 nadal tam
jest. To czy Alfa Romeo będzie teraz wyświetlana przy złączeniach tabel zależy od typu złączenia.
W przypadku złączenia wewnętrznego (INNER JOIN) nie będzie wyświetlana, natomiast przy
odpowiednim użyci złączenia zewnętrznego jednostronnego (RIGHT OUTER JOIN lub LEFT OUTER
JOIN) lub obustronnego (FULL OUTER JOIN) zostanie uwzględniona w zbiorze danych
wyjściowych.

Podobne dokumenty