BazyDanych_Lab4 air - Instytut Mechaniki i Inżynierii

Transkrypt

BazyDanych_Lab4 air - Instytut Mechaniki i Inżynierii
Instytut Mechaniki i Inżynierii Obliczeniowej
www.imio.polsl.pl
fb.com/imiopolsl
@imiopolsl
fb.com/groups/bazydanychmt/
Wydział Mechaniczny technologiczny
Politechnika Śląska
Laboratorium 4
(Asocjacje, klucz główny, klucz obcy)
1
Informacje podstawowe
Klucz główny

każda tabela powinna posiadać klucz główny PRIMARY KEY (PK),

powinien być on unikalny (niepowtarzający się).

może on być pojedynczą kolumną (zazwyczaj numery indeksu, inwentarzowe, numery pesel
itp.) lub kombinacją kolumn np. imie+nazwisko+miasto_urodzenia
Przykładowa składnia SQL przy tworzeniu tabeli
CREATE TABLE student
(
nrIndeksu int NOT NULL,
Imie varchar(45) NOT NULL,
Nazwisko varchar(45) NOT NULL,
PRIMARY KEY (nrIndeksu)
);
Klucz obcy
•
FOREIGN KEY (FK) wiąże kolumnę lub kolumny tabel z kolumną/kolumnami w innej (obcej)
tabeli
•
Kolumna obcej tabeli do której odwołuje się FK musi być typu UNIQE lub PK
•
Wartość pola tabeli dla którego jest określony FK musi posiadać wartość która istnieje w
tabeli „obcej”
Asocjacja (połączenie) klucz główny – klucz obcy zabezpiecza przed wprowadzeniem błędnych
danych mogących spowodować utratę połączenia pomiędzy tabelami.
Przykładowa składnia SQL przy tworzeniu tabeli (w powiązaniu do tabeli student)
CREATE TABLE grupa_studentow
(
nrIndeksu int NOT NULL,
nrGrupy int NOT NULL,
PRIMARY KEY (nrIndeksu),
FOREIGN KEY (nrIndeksu) REFERENCES student(nrIndeksu)
);
2
1. Utwórz dwie powiązane ze sobą (klucz główny - klucz obcy) tabele o poniższych schematach
Tabela oddzial, z następującymi atrybutami:
id_oddzialu int NOT NULL,
miejscowosc varchar(50),
telefon varchar(12) ,
Przy tworzeniu tej tabeli ustaw klucz główny na pole id_oddzialu!
oraz tabela pracownik, z następującymi atrybutami:
id_pracownika int NOT NULL,
imie varchar(50),
nazwisko varchar(50) ,
id_oddzialu int NOT NULL,
Przy tworzeniu tej tabeli ustaw klucz główny na pole id_pracownika
oraz klucz obcy o nazwie id_oddzialu powiązany z polem id_oddzialu w tabeli oddzial!
2. Wypełnij tabele następującymi danymi:
3 Dodaj/usuń następujące informacje do tabel:
a) Dodaj rekord do tabeli pracownik (za pomocą instrukcji SQL) dla następujących danych
(id_pracownika 5, imie Grzegorz, nazwisko Voit, id_oddzialu 5)
b) Dodaj rekord do tabeli pracownik (za pomocą instrukcji SQL) dla następujących danych
(id_pracownika 6, imie Jan, nazwisko Szulc, id_oddzialu 2)
c) Usuń rekord z tabeli oddział dla id_oddzialu=4
Dla każdego z powyższych zadań zanotuj informację zwracaną przez MySQL Workbench!
3
4. Komendą Reverese Engineer (wywoływaną z menu Database) utwórz i zachowaj diagram UML
dwóch utworzonych i powiązanych ze sobą tabel.
5. Utwórz nowy model bazy danych (File->New Model) a w nim nowy diagram UML
(Model->Add Diagram)
6. Utwórz 3 tabele o poniższych schematach.
idElementu oraz idCzesci
tworzą klucz główny i nie mogą
się powtórzyć (wspólnie)
– zaznaczone pola PK, NN
idCzesci
– zaznaczone pola PK, NN, UQ
idElementu
– zaznaczone pola PK, NN, UQ
7. Utwórz asoscacje (złączenie klucz główny – klucz obcy) w UML zgodnie z poniższym schematem.
Kolumny (atrybuty) idElementu oraz idCzesci mają być kluczem obcym w tabeli Elementy, połączone
z odpowiednimi kluczami głównymi tabel Czesci oraz NazwaEl
4
Do utworzenia tych asocjacji wykorzystaj ikonę
diagramów (rysunek poniżej)
dostepną w pasku narzędziowym okna
Narzędzie to tworzy asocjację wykorzystując istniejące kolumny tabel.
Uwaga:
Użycie innych narzędzi (ikon) powoduje powstanie nowej dodatkowej
kolumny dla każdego utworzonego klucza obcego.
8. Wykonaj opcję Forward Engineer z menu Database. Po zakończonej operacji Forward Engineer
przejdź do okna Navigatora MySQL Workbench.
9. Wypełnij tabele danymi tak jak w laboratorium nr 3, tj:
10. Zmień polecenie UPDATE w tabeli NazwaEl rekord idElementu równy 1002 na wartość 2.
11. Wyświetl dane ze wszystkich tabel poleceniem:
SELECT * FROM elementy INNER JOIN czesci ON elementy.idCzesci=czesci.idCzesci
INNER JOIN nazwael ON elementy.idElementu=nazwael.idElementu;
oraz sprawdź skutek działania polecenia SQL z p.10.
5
12. Zmień parametry złączenia tabel. Użyj ikonki klucza
, a następnie
w opcjach klucza obcego zmień parametry z RESTRICT na CASCADE. Wykonaj to dla obydwu kluczy
oraz obydwu opcji ON UPDATE, ON DELETE (rysunek poniżej).
Uwaga:
Opcja CASCADE umożliwia kaskadową zmianę zawartości połączonych tabel, tj. zmiana wartości
w tabeli nadrzędnej (asocjacja po stronie klucza głównego) powoduje zmianę we wszystkich
krotkach tabel podrzędnych (asocjacja po stronie klucza obcego).
13. Wykonaj ponownie polecenie z p. 10, a następnie sprawdź rezultat jego działania wykonując
polecenie z p. 11.
6