Cvičení 4 – Implementace relačního modelu v MS Access
Cvičení 4 – Implementace relačního modelu v MS Access
Cíl cvičení
Po absolvování tohoto cvičení bude student schopen:
- vytvořit databázi v MS Access
- založit tabulky podle relačního modelu
- správně nastavit datové typy
- nastavit primární klíče
- nastavit cizí klíče
- zapnout referenční integritu
- pochopit vztah mezi teoretickým návrhem a praktickou implementací
Teoretická část (minimálně 20 minut)
1. Relační model vs. implementace
V minulém cvičení jsme vytvořili relační model:
- určili tabulky
- určili primární klíče
- určili cizí klíče
Dnes tento model převedeme do konkrétní databáze.
Důležité: Model je návrh. Access je implementace.
2. Primární klíč
Primární klíč:
- jednoznačně identifikuje záznam
- nesmí být NULL
- musí být unikátní
V Access:
- označit pole
- kliknout na „Primary Key“
3. Cizí klíč
Cizí klíč:
- odkazuje na primární klíč jiné tabulky
- vytváří vztah mezi tabulkami
V Access:
- nastavuje se pomocí nástroje „Relationships“
4. Referenční integrita
Referenční integrita zajišťuje, že:
- nelze vložit FK bez existujícího PK
- nelze smazat rodiče, pokud existují závislé záznamy
Bez referenční integrity je databáze nekonzistentní.
Praktická část – Univerzitní databáze
Budeme implementovat model z Cvičení 3.
Krok 1 – Vytvoření databáze
- Otevři MS Access.
- Klikni na „Blank Database“.
- Název: univerzita.accdb.
- Klikni Create.
Krok 2 – Vytvoření tabulek
Tabulka FAKULTA
Pole:
- faculty_id – AutoNumber – Primary Key
- nazev – Short Text
Ulož jako: FAKULTA
Tabulka STUDENT
Pole:
- student_id – AutoNumber – Primary Key
- jmeno – Short Text
- faculty_id – Number (Long Integer)
Ulož jako: STUDENT
Tabulka ZAMESTNANEC
Pole:
- employee_id – AutoNumber – Primary Key
- jmeno – Short Text
- faculty_id – Number (Long Integer)
Ulož jako: ZAMESTNANEC
Tabulka PREDMET
Pole:
- subject_id – AutoNumber – Primary Key
- nazev – Short Text
- employee_id – Number (Long Integer)
Ulož jako: PREDMET
Tabulka ZAPIS
Pole:
- student_id – Number (Long Integer)
- subject_id – Number (Long Integer)
- znamka – Number
Primární klíč: Označ student_id + subject_id Klikni „Primary Key“ (složený klíč)
Ulož jako: ZAPIS
Krok 3 – Nastavení vztahů
- Klikni Database Tools → Relationships.
- Přidej všechny tabulky.
- Přetáhni:
FAKULTA.faculty_id → STUDENT.faculty_id
FAKULTA.faculty_id → ZAMESTNANEC.faculty_id
ZAMESTNANEC.employee_id → PREDMET.employee_id
STUDENT.student_id → ZAPIS.student_id
PREDMET.subject_id → ZAPIS.subject_id
- Zaškrtni „Enforce Referential Integrity“.
- Klikni Create.
Krok 4 – Test integrity
Test 1
Zkus vložit STUDENT s faculty_id, které neexistuje.
Očekávání: Access odmítne vložení.
Test 2
Zkus smazat FAKULTA, která má studenty.
Očekávání: Access odmítne smazání.
Krok 5 – Vložení testovacích dat
Vlož minimálně:
- 2 fakulty
- 3 studenty
- 2 zaměstnance
- 3 předměty
- 5 zápisů
Ověř, že vazby fungují.
Kontrolní seznam
- Každá tabulka má primární klíč.
- Vztahy jsou vytvořeny.
- Referenční integrita je zapnutá.
- Složený primární klíč funguje.
- Datové typy FK odpovídají PK.
1. SELECT
Úkol
Vypiš všechny studenty.
SELECT * FROM student;
Úkol
Vypiš jméno a příjmení.
SELECT jmeno, prijmeni FROM student;
2. WHERE
Úkol
Studenti z Ostravy
SELECT * FROM student
WHERE mesto = "Ostrava";
3. ORDER BY
SELECT * FROM student
ORDER BY prijmeni;
4. Agregace
SELECT COUNT(*) FROM student;
5. JOIN
SELECT s.jmeno, f.nazev
FROM student AS s
INNER JOIN fakulty AS f
ON s.id_fakul = f.id;
6. Více tabulek
SELECT s.jmeno, p.nazev
FROM (student AS s
INNER JOIN zapis AS z ON s.id = z.id_stu)
INNER JOIN predmet AS p ON z.id_pred = p.id;
7. Pokročilé
SELECT TOP 1 *
FROM student
ORDER BY studijni_prumer;
Nejčastější chyby
- FK má jiný datový typ než PK.
- Není zapnutá referenční integrita.
- ZAPIS nemá složený primární klíč.
- FK je nastaven jako AutoNumber (nesmí být).
Úkol k odevzdání
Odevzdej:
- Screenshot diagramu vztahů.
- Screenshot tabulky ZAPIS s primárním klíčem.
- Stručné vysvětlení:
- proč mají FK datový typ Number (Long Integer)
- proč ZAPIS používá složený klíč
Co bude následovat
V příštím cvičení budeme nad touto databází vytvářet dotazy.