🎯 Cele lekcji

🏛️

1. Encja silna vs encja słaba

Encja silna — posiada własny, unikalny klucz główny, który jednoznacznie identyfikuje każdą instancję bez odwoływania się do innych encji.

Encja słaba (weak entity) — nie posiada własnego klucza głównego. Jej identyfikacja zależy od powiązanej encji właściciela (owner entity). Identyfikowana przez klucz częściowy (partial key) + klucz encji właściciela.
CechaEncja silnaEncja słaba
Klucz własnyTak (pełny PK)Nie (tylko klucz częściowy)
Notacja ChenaPojedynczy prostokąt ▭Podwójny prostokąt ▭▭
Notacja IEZwykły prostokątProstokąt (związek identyfikujący)
PrzykładZamówienie (nr_zamowienia)Pozycja_zamówienia (nr_pozycji w ramach zamówienia)
Typ związkuNiezależnaZwiązek identyfikujący (podwójny romb w Chenie)
zamowienie
  • 🔑 nr_zamowienia
  • data
  • status
1 ──── N
pozycja_zamowienia ⟨słaba⟩
  • nr_pozycji (klucz częściowy)
  • 🔗 nr_zamowienia (FK — właściciel)
  • id_produktu
  • ilosc
🏷️

2. Rodzaje atrybutów

Typ atrybutuOpisPrzykładImplementacja SQL
Prosty (Simple) Niepodzielna, jednorodna wartość imie, cena, pesel Jedna kolumna: imie VARCHAR(50)
Złożony (Composite) Składa się z pod-atrybutów adres = ulica + miasto + kod Wiele kolumn: ulica, miasto, kod_pocztowy
Wielowartościowy (Multi-valued) Może mieć wiele wartości dla jednej encji numery_telefonow, hobby Osobna tabela: telefony(id_klienta FK, numer)
Pochodny (Derived) Obliczany z innych atrybutów — nie przechowywany wiek (z data_urodzenia), wartosc_zamowienia Kolumna wirtualna lub obliczana na bieżąco

Przykład — encja Pracownik z różnymi typami atrybutów:

Pracownik
  • 🔑 id_pracownika (prosty, PK)
  • pesel (prosty, unique)
  • imie (prosty)
  • nazwisko (prosty)
  • adres (złożony → ulica, miasto, kod)
  • ⬭⬭ telefony (wielowartościowy)
  • ⬭… wiek (pochodny z data_urodzenia)
  • data_urodzenia (prosty)
  • 🔗 id_dzialu (FK)
🔑

3. Klucz główny w E/R i dobór typów danych

Oznaczanie klucza głównego w różnych notacjach:

NotacjaSposób oznaczenia PK
ChenPodkreślenie nazwy atrybutu: id_pracownika
IE (crow's foot)Symbol kluczyka 🔑 lub sekcja PK w prostokącie
UMLStereotyp «PK» lub podkreślenie w sekcji atrybutów

Dobór typów danych SQL do atrybutów:

AtrybutTyp SQLUzasadnienie
id (klucz główny)INT AUTO_INCREMENTLiczba całkowita, automatyczna numeracja
imie, nazwiskoVARCHAR(50–100)Tekst o zmiennej długości
opis, uwagiTEXTDługi tekst bez limitu
cena, pensjaDECIMAL(10,2)Precyzyjna liczba dziesiętna (finanse)
wiek, iloscTINYINT / SMALLINT / INTLiczba całkowita (dobierz rozmiar)
data_urodzenia, dataDATETylko data (YYYY-MM-DD)
data_rejestracji (z godziną)DATETIME / TIMESTAMPData i godzina
aktywny, czy_platnyBOOLEAN / TINYINT(1)Wartość logiczna (0/1)
plecENUM('M','K') lub CHAR(1)Ograniczony zestaw wartości
kod_pocztowyCHAR(6)Stała długość: 00-000
✏️

Zadania interaktywne

Zadanie 1Klasyfikacja atrybutów Pracownika

Dla encji "Pracownik" sklasyfikuj każdy atrybut:

data_urodzenia
adres (ulica + miasto + kod)
numery_telefonow
wiek (obliczany z daty urodzenia)
imie
Zadanie 2Dobierz typy SQL do atrybutów encji Produkt

Dobierz odpowiedni typ danych SQL dla każdego atrybutu encji Produkt:

id_produktu (klucz główny, autoinkrementacja)
cena (np. 1299.99)
data_dodania
czy_aktywny (tak/nie)
Zadanie 3Określ klucz główny

Dla każdej encji wybierz najlepszy kandydat na klucz główny:

Encja Student: nr_albumu, imie, nazwisko, email, data_urodzenia

  • imie + nazwisko
  • nr_albumu
  • email
  • data_urodzenia

Encja Ksiazka: tytul, autor, isbn, rok_wydania, liczba_stron

  • tytul
  • autor + tytul
  • isbn
  • rok_wydania

📌 Zapamiętaj