Teoria – z E/R do tabel SQL
Encje → tabele
Każdą encję z diagramu E/R odwzorowujemy jako osobną tabelę SQL. Atrybuty encji stają się kolumnami, a klucz główny encji staje się kluczem głównym tabeli (najczęściej INTEGER z AUTO_INCREMENT).
Relacje 1‑wiele (1‑N)
Relację 1‑wiele odwzorowujemy dodając w tabeli „wiele” kolumnę klucza obcego, która wskazuje na klucz główny tabeli „jeden”. Przykład: jeden użytkownik może być zapisany na wiele kursów.
Relacje wiele‑wiele (N‑N)
Relację wiele‑wiele odwzorowujemy poprzez tabelę pośredniczącą (łącznikową), która zawiera co najmniej dwa klucze obce do tabel encji. Często klucz główny jest złożony z tych dwóch kluczy.
Typy danych i ograniczenia
Dla każdego atrybutu dobieramy odpowiedni typ SQL (VARCHAR, INT, DATE, DECIMAL...).
Atrybuty wymagane oznaczamy jako NOT NULL.
Dodatkowo możemy dopisać UNIQUE, aby uniemożliwić duplikaty (np. email użytkownika).
Projekt E/R – EduCourses (portal kursów online)
Projekt EduCourses – prosty portal kursów online. Występują w nim m.in.:
- UŻYTKOWNIK – loguje się do systemu, może zapisywać się na kursy.
- KURS – ma tytuł, opis, poziom trudności.
- ZAPIS – reprezentuje relację Użytkownik–Kurs (wiele‑wiele).
- LEKCJA – należy do jednego kursu, ma tytuł i numer porządkowy.
Tablice SQL – struktura bazy EduCourses
Tworzenie bazy danych EduCourses
CREATE DATABASE + wybór bazy
Zanim utworzysz tabele, musisz mieć bazę danych i wybrać ją poleceniem USE.
Dzięki temu wszystkie polecenia CREATE TABLE trafią do właściwej bazy.
Utwórz bazę danych
educourses i ustaw ją jako bieżącą.
Użyj kodowania UTF‑8 z polską kolacją, aby poprawnie przechowywać polskie znaki.
-- Utworzenie bazy danych dla projektu EduCourses
CREATE DATABASE IF NOT EXISTS educourses
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_polish_ci;
-- Ustawienie bazy jako bieżącej
USE educourses;
Ćwiczenia – z diagramu do CREATE TABLE
Na podstawie encji UŻYTKOWNIK z diagramu E/R zdefiniuj tabelę
uzytkownicy.
Kluczem głównym ma być uzytkownik_id (AUTO_INCREMENT).
Pole email powinno być unikalne.
-- Tabela użytkowników systemu EduCourses
CREATE TABLE uzytkownicy (
uzytkownik_id INT PRIMARY KEY AUTO_INCREMENT,
imie VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
data_rejestracji DATE NOT NULL
);
Utwórz tabelę
kursy z kolumnami: kurs_id (PK, AUTO_INCREMENT),
tytul, poziom (np. 'podstawowy', 'średni', 'zaawansowany') oraz cena.
Dobierz odpowiednie typy danych.
-- Tabela kursów dostępnych w portalu EduCourses
CREATE TABLE kursy (
kurs_id INT PRIMARY KEY AUTO_INCREMENT,
tytul VARCHAR(100) NOT NULL,
poziom VARCHAR(20) NOT NULL,
cena DECIMAL(7,2) NOT NULL
);
Narysuj w myślach fragment E/R: jeden kurs ma wiele lekcji. Zaimplementuj to jako tabelę
lekcje z kluczem obcym do kursy.
Dodaj kolumnę nr_kolejnosci do sortowania lekcji.
-- Tabela lekcji należących do kursów
CREATE TABLE lekcje (
lekcja_id INT PRIMARY KEY AUTO_INCREMENT,
kurs_id INT NOT NULL,
tytul VARCHAR(100) NOT NULL,
nr_kolejnosci INT NOT NULL,
FOREIGN KEY (kurs_id) REFERENCES kursy(kurs_id)
);
Użytkownik może zapisać się na wiele kursów, a kurs może mieć wielu użytkowników. Odwzoruj relację N‑N jako tabelę
zapisy z dwoma kluczami obcymi.
Dodaj kolumny data_zapisu i status.
-- Tabela zapisów użytkowników na kursy
CREATE TABLE zapisy (
zapis_id INT PRIMARY KEY AUTO_INCREMENT,
uzytkownik_id INT NOT NULL,
kurs_id INT NOT NULL,
data_zapisu DATE NOT NULL,
status VARCHAR(20) NOT NULL,
FOREIGN KEY (uzytkownik_id) REFERENCES uzytkownicy(uzytkownik_id),
FOREIGN KEY (kurs_id) REFERENCES kursy(kurs_id)
);
Sprawdź, czy każda relacja z diagramu E/R ma swoje odzwierciedlenie w kluczu obcym i czy nie zapomniałeś o żadnym atrybucie. Uzupełnij brakujące kolumny lub relacje.
Zadanie projektowe – własna baza wg E/R
Od diagramu E/R do skryptu CREATE TABLE
Na podstawie własnego projektu E/R (np. wypożyczalnia rowerów, hotel, biblioteka, sklep internetowy)
przygotuj kompletny skrypt tworzący bazę danych.
Każdą tabelę i relację opisz komentarzem SQL --.
- 01 Zidentyfikuj encje i ich atrybuty. Dla każdej encji zapisz proponowaną nazwę tabeli i kolumn.
- 02 Określ klucze główne tabel (PK) i zdecyduj, gdzie użyjesz AUTO_INCREMENT.
- 03 Wyznacz relacje 1‑N i N‑N. Dla każdej relacji zaprojektuj klucze obce (FK) i ewentualne tabele pośredniczące.
-
04
Napisz skrypt
CREATE DATABASE+ komplet poleceńCREATE TABLEodwzorowujących Twój diagram. - 05 Uruchom skrypt na serwerze SQL, popraw ewentualne błędy i dopisz kilka przykładowych INSERT‑ów testowych.