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.