Klasa 4 · rozdział 3

Encja, atrybut, krotka, tabela

Serwer już działa. Zanim wstawisz dane, musisz nazwać rzeczy po imieniu. Encja, atrybut, krotka to język projektu. Tabela, kolumna, wiersz to to samo — już w MySQL. Na INF.03 pojawiają się oba zestawy.

INF.03.4.1 Model relacyjny

Po tym rozdziale powinieneś umieć

  • podać definicję encji, atrybutu i krotki oraz odróżnić typ encji od egzemplarza;
  • zestawić: encja → tabela, atrybut → kolumna, krotka → wiersz;
  • określić dziedzinę atrybutu (dopuszczalne wartości);
  • wskazać atomowość, unikalność wierszy i brak znaczenia kolejności;
  • wyodrębnić encję i atrybuty z krótkiego opisu (biblioteka, hurtownia, uczeń).

1. Od świata rzeczywistego do tabeli

Projekt bazy to trzy warstwy — nie skaczesz od razu do CREATE TABLE.

1. Świat

Obiekty, które obserwujesz: czytelnicy, książki, wizyty, faktury.

2. Model logiczny

Typ encji Czytelnik, atrybuty (imię, PESEL), dziedziny tych cech.

3. Model fizyczny

Tabela w MySQL, kolumny z typami, wiersze z konkretnymi danymi.

Po co dwa języki? Na diagramie E/R (kolejne rozdziały) mówisz „encja”. W phpMyAdmin klikasz „tabela”. To odwzorowanie 1:1 na tym etapie nauki — nie dwa różne byty.

2. Encja, atrybut, krotka — definicje

Te trzy pojęcia są z poziomu koncepcyjnego (projektu). Zanim zobaczysz tabelę w phpMyAdmin, musisz umieć je wypowiedzieć własnymi słowami i nie pomylić kategorii z jednym wpisem.

Encja (entity) Obiekt istniejący w modelowanym wycinku rzeczywistości — osoba, rzecz, miejsce, zdarzenie albo pojęcie — który da się odróżnić od innych obiektów i o którym baza ma przechowywać dane. Encja jest istotna dla dziedziny (szkoła, sklep, biblioteka): jeśli nic o niej nie zapiszemy, model jest niekompletny.

Słowo „encja” bywa używane na dwa sposoby. Na kartkówce i na INF.03 rozróżniaj je świadomie:

Typ encji (entity type)

Kategoria obiektów o jednakowym zestawie cech. Definiujesz ją raz: nazwą i listą atrybutów. Przykłady: Uczeń, Książka, Faktura, Samochód. W MySQL typ encji staje się tabelą.

Egzemplarz encji (entity instance)

Jeden konkretny obiekt należący do typu. Przykłady: uczeń Jan Kowalski z klasy 4 TI; książka „Lalka” Bolesława Prusa; auto KR 12345. W tabeli egzemplarz zapisujesz jako krotkę (wiersz).

Żeby coś uznać za encję (a nie za luźną cechę), sprawdź trzy pytania:

  1. Czy da się wskazać wiele takich obiektów i odróżnić jeden od drugiego?
  2. Czy obiekt ma własne cechy, które chcemy zapisać?
  3. Czy jest ważny sam w sobie, a nie tylko jako wartość przy kimś innym? (PESEL to atrybut ucznia, nie encja.)
Atrybut (attribute) Nazwana właściwość (cecha) typu encji. Każdy egzemplarz tego typu ma przy tym atrybucie jedną wartość wziętą z dziedziny — zbioru wartości dopuszczalnych. Atrybut opisuje wszystkie obiekty danej kategorii tym samym pytaniem: „jakie ma nazwisko?”, „kiedy się zapisał?”, „ile kosztuje?”. W MySQL atrybut staje się kolumną (polem).

Na tym etapie zapamiętaj jeszcze trzy ograniczenia atrybutu:

  • Należy do encji, nie jest encją. Nazwisko nie istnieje samodzielnie w modelu — istnieje przy uczniu. Gdy cecha sama zaczyna mieć historię i wiele wartości (np. kolejne numery telefonu), często wydzielasz osobną encję.
  • Wartość powinna być atomowa — jedna informacja w jednej komórce, nie lista „Laptop, myszka, torba”.
  • Ten sam atrybut, ta sama dziedzina dla wszystkich krotek tabeli. Nie trzymasz w kolumnie RokWydania raz roku, a raz nazwiska autora.

Atrybuty bywają opisowe (tytuł, kolor) albo identyfikujące (ISBN, PESEL, numer faktury) — te drugie pozwalają odróżnić egzemplarze. Klucz główny poznasz wkrótce; dziś wystarczy, że wiesz, po co taka cecha jest.

Krotka (tuple) Komplet wartości atrybutów opisujący dokładnie jeden egzemplarz encji. Jeśli typ encji ma atrybuty ISBN, Tytuł, Rok, Cena — krotka to jeden zestaw: (9788328300000, Czysty Kod, 2017, 69.00). W tabeli krotka to wiersz (rekord). Relacja to zbiór takich krotek.

Egzemplarz to obiekt w świecie. Krotka to jego zapis w modelu: same wartości, ułożone według atrybutów typu. Bez kompletu atrybutów nie ma krotki — jest tylko luźna cecha.

  • Dwie identyczne krotki w relacji są zabronione (stąd później klucz główny).
  • Kolejność krotek w tabeli nie zmienia znaczenia danych — to zbiór, nie lista „od góry”.
  • Kolejność atrybutów też nie jest istotna logicznie: krotkę rozpoznajesz po nazwach cech, nie po „trzeciej kolumnie”.
Definicje na kartkówkę — wersja skrócona
  • Encja — rozróżnialny obiekt dziedziny, o którym przechowujemy dane. Typ encji = kategoria; egzemplarz = konkret.
  • Atrybut — nazwana cecha typu encji; wartość z dziedziny; w tabeli = kolumna.
  • Krotka — zestaw wartości atrybutów jednego egzemplarza; w tabeli = wiersz.
Trzy pomyłki, których nie popełniaj
  1. „Encja to Jan Kowalski” — to egzemplarz (i krotka), nie typ.
  2. „Atrybut to tabela” — atrybut to cecha, tabela to cały typ encji.
  3. „Krotka to kolumna” — krotka idzie w poprzek tabeli (wiersz), nie w dół (kolumna).

3. Słownik: poziom koncepcyjny vs fizyczny

Teoria (projekt) MySQL (wdrożenie) Przykład
Typ encji (entity type) Tabela (table) Tabela Pracownicy
Egzemplarz / krotka (tuple) Wiersz / rekord (row, record) Wiersz Jana Nowaka
Atrybut (attribute) Kolumna / pole (column, field) Kolumna DataUrodzenia
Dziedzina (domain) Typ + ograniczenia INT, VARCHAR(50), DATE, NOT NULL
Relacja (relation) Zawartość tabeli (zbiór wierszy) Wszystkie krotki o tej samej strukturze

Typ encji ≠ egzemplarz

Typ encji

Kategoria: SAMOCHÓD — wszystkie auta, które chcemy opisać tymi samymi cechami.

Egzemplarz

Konkret: Toyota Corolla, nr rej. KR 12345, rok 2021. To jedna krotka.

Typowy błąd na kartkówce „Encja to Jan Kowalski” — nie. Jan Kowalski to egzemplarz (krotka). Encja (typ) to Uczeń albo Klient.

Dopasuj pojęcia

Sprawdź, czy mapowanie siedzi. Potem wróć do tabeli, jeśli coś zgrzyta.

Krotka odpowiada w MySQL…
Atrybut odpowiada…
Typ encji odpowiada…

4. Dziedzina atrybutu i typy danych

Dziedzina to zbiór wartości, które atrybut ma prawo przyjąć. W MySQL przybliżasz ją typem i ograniczeniami. Na razie bez składni CHECK — ważne, żebyś umiał dziedzinę nazwać.

Atrybut Dziedzina (logika) Typ w MySQL (orientacyjnie)
MiesiacUrodzenia Liczby całkowite 1–12 TINYINT + reguła zakresu
PESEL Dokładnie 11 cyfr (plus suma kontrolna w życiu) CHAR(11), nie „liczba” — zero wiodące
StatusKonta {Aktywne, Zablokowane} ENUM albo krótki VARCHAR
CenaNetto Liczba ≥ 0, dwa miejsca po przecinku DECIMAL(10,2), nie FLOAT do pieniędzy
DataZapisu Prawidłowa data kalendarzowa DATE
PESEL jako tekst Numer z zerami wiodącymi i stałą długością trzymasz jako łańcuch. INT zgubi zero z przodu i nie pilnuje 11 znaków.

5. Reguły poprawnej tabeli relacyjnej

Model E.F. Codda (1970): tabela jest relacją, gdy spełnia kilka zasad. Na ocenę 6 możesz wspomnieć zbiór i iloczyn kartezjański dziedzin — bez wykładu akademickiego.

  1. Atomowość. W komórce jedna wartość, nie lista. Źle: Jan Kowalski, tel. 500-600-700, 600-700-800. Dobrze: osobne kolumny imię / nazwisko; telefony w osobnej tabeli (wielowartościowość).
  2. Unikalność krotek. Żadnych identycznych wierszy. Do tego służy klucz główny — poznasz go wkrótce, ale zasadę znasz już dziś.
  3. Kolejność wierszy nie ma znaczenia. Relacja to zbiór, nie „wiersz 3 od góry”. Sortowanie robisz zapytaniem (ORDER BY), nie układem na dysku.
  4. Kolejność kolumn nie ma znaczenia. Kolumnę wołasz po nazwie, nie po numerze pozycji.
Zapowiedź 1NF Atomowość to wstęp do pierwszej postaci normalnej (dział normalizacji). Jeśli w jednej komórce masz „Laptop, myszka, torba” — to już sygnał, że model jest zły.

6. Studium przypadku: encja KSIĄŻKA

Katalog biblioteczny. Typ encji KSIAZKA staje się tabelą.

Tabela Ksiazki — kolumny to atrybuty, wiersze to krotki
ISBN
tekst, 13 znaków
Tytul
tekst do 100
RokWydania
liczba całkowita > 0
CenaNetto
liczba ≥ 0, 2 miejsca
9788328300000 Czysty Kod 2017 69.00 krotka 1
9788301140000 Algorytmy i struktury 2019 85.50 krotka 2
9788324631000 Relacyjne bazy danych 2021 54.00 krotka 3
  • ISBN — kandydat na identyfikator (dziedzina: 13 cyfr).
  • Tytul — opisowy, nieunikalny (dwa wydania mogą mieć ten sam tytuł).
  • RokWydania — np. 1500–rok bieżący, nie „dwa tysiące dziewiętnaście” jako tekst.
  • CenaNetto — pieniądze: nieujemne, dwa miejsca.

7. Przykładowa baza do importu

Tę samą strukturę masz w pliku SQL. Importujesz go w phpMyAdmin i na lekcji wskazujesz palcem: tabela = typ encji, kolumna = atrybut, wiersz = krotka.

Plik: sql/bd_rozdzial03.sql (prawy przycisk → zapisz, jeśli przeglądarka otworzy go jako tekst).

Import w phpMyAdmin
  1. Włącz Apache i MySQL.
  2. Wejdź na http://localhost/phpmyadmin.
  3. Zostań na poziomie serwera — nie klikaj żadnej bazy po lewej (plik sam zrobi CREATE DATABASE).
  4. Karta ImportWybierz plikbd_rozdzial03.sqlWykonaj.
  5. W drzewie po lewej odśwież listę. Powinna pojawić się baza bd_rozdzial03.

W bazie są trzy tabele:

Tabela Typ encji Po co na lekcji
ksiazki Książka Ten sam przykład co w studium wyżej. Karta Przeglądaj = krotki; Struktura = atrybuty i dziedziny (typy).
czytelnicy Czytelnik Druga kategoria obiektów. Baza to zwykle więcej niż jedna encja. Związków (FK) jeszcze nie ma.
przyklad_bledny Celowo zła tabela: listy w komórkach. Do ćwiczenia o atomowości.
Co pokazać na rzutniku
  1. Drzewo: baza bd_rozdzial03 to zbiór typów encji, nie „jeden plik Excel”.
  2. ksiazki → Struktura: cztery atrybuty i ich typy (CHAR(13), VARCHAR, SMALLINT, DECIMAL).
  3. ksiazki → Przeglądaj: każdy wiersz to jedna krotka. Wskaż „Czysty Kod” jako egzemplarz encji Książka.
  4. Karta SQL: SELECT * FROM ksiazki; — zestaw wynikowy to znowu krotki, tylko jako odpowiedź serwera.
  5. przyklad_bledny: „gdzie złamano atomowość?”.
SELECT * FROM ksiazki;
SELECT isbn, tytul FROM ksiazki;
SELECT * FROM czytelnicy;
Ponowny import Skrypt najpierw kasuje te trzy tabele i wkłada dane od nowa. Nie rusza innych baz. Jeśli nazwa bd_rozdzial03 już jest — dopisze tabele w niej.

Ćwiczenia do samodzielnego wykonania

Ćwiczenie 0. Baza na serwerze łatwe

Zaimportuj bd_rozdzial03.sql. Otwórz ksiazki i w zeszycie zapisz: typ encji, cztery atrybuty, wartości drugiej krotki (wiersz „Algorytmy i struktury”). Potem kartą SQL wykonaj SELECT * FROM czytelnicy; i policz krotki.

Ćwiczenie 1. Identyfikacja w zdaniu łatwe

„Samochód osobowy marki Skoda Octavia, rok produkcji 2021, o numerze VIN TMBA… i przebiegu 45 000 km, został zarejestrowany w wydziale komunikacji.”

Wskaż: typ encji, atrybuty, wartości jednej krotki.

Typ: Samochód (osobowy). Atrybuty: marka/model, rok, VIN, przebieg. Krotka: Skoda Octavia | 2021 | TMBA… | 45000. „Wydział komunikacji” to raczej inna encja albo proces, nie cecha auta.

Ćwiczenie 2. Encja UCZEN średnie

  1. Wypisz co najmniej 5 atrybutów ucznia w dzienniku.
  2. Dla każdego podaj dziedzinę (tekst, data, liczba, ograniczenia).
  3. Podaj 2 przykładowe krotki.
  4. Który atrybut najlepiej odróżnia uczniów i dlaczego? (PESEL vs numer w dzienniku vs imię i nazwisko)

Ćwiczenie 3. Złamane reguły średnie

Które zasady relacji łamie ta tabela?

ID Klient Telefony Zakupy
1 Piotr Nowak 501-200-300, 22-800-90-00 Laptop, Myszka, Torba
2 Anna Lis brak Klawiatura

Napisz, jak byś to rozdzielił (osobne kolumny / osobna encja).

Ćwiczenie 4. Hurtownia komputerowa trudne

„O produkcie musimy wiedzieć: unikalny kod EAN (13 cyfr), pełną nazwę, cenę netto, stan magazynowy w sztukach oraz czy jest gwarancja producenta (tak/nie).”

  1. Typ encji.
  2. Atrybuty i dziedziny.
  3. Trzy przykładowe krotki w tabelce.

Ćwiczenie 5. Granica modelu celujący

Czy lista telefonów klienta może zostać kolumną, czy powinna stać się osobną encją? Uzasadnij atomowością i tym, co się stanie, gdy klient zmieni numer. Jednym zdaniem: relacja jako podzbiór iloczynu kartezjańskiego dziedzin — własnymi słowami.

Sprawdź się

1. Czym jest krotka?
2. Dziedzina atrybutu to:
3. Czy kolejność wierszy ma znaczenie logiczne w relacji?
4. Typ encji Książka a egzemplarz to:
5. Który zapis łamie atomowość?

Wymagania na ocenę

Rozdział 3 otwiera dział 2 (pojęcia i model relacyjny). Dziś oceniamy opanowanie czterech pojęć i mapowania na tabelę.

Ocena Uczeń
2 Wskazuje w tabeli kolumnę i wiersz. Z pomocą podaje przykład encji i atrybutu (uczeń — nazwisko).
3 Poprawnie używa: encja, atrybut, krotka, tabela. Tworzy prostą tabelę z trzema atrybutami. Określa dziedzinę (liczba, tekst, data).
4 Mapuje encja → tabela, krotka → wiersz, atrybut → kolumna. Wyodrębnia encje i atrybuty z krótkiego tekstu. Rozróżnia typ encji i egzemplarz.
5 Projektuje zestaw atrybutów ze dziedziną, unikalnością i atomowością. Uzasadnia atrybut identyfikujący.
6 Analizuje przypadek graniczny (atrybut wielowartościowy → osobna encja). Wykazuje zrozumienie relacji jako zbioru krotek (idea iloczynu dziedzin).

Lista „już umiem”