W diagramie bazy danych pokazanym w pytaniu elementy „czytelnik”, „wypozyczenie” i „ksiazka” to klasyczne przykłady encji. Encja w modelu relacyjnym (a dokładniej w modelu ER – Entity-Relationship) oznacza pewien typ obiektu ze świata rzeczywistego, o którym chcemy przechowywać dane w bazie. W praktyce encja odpowiada tabeli w relacyjnej bazie danych: encja CZYTELNIK → tabela czytelnik, encja KSIĄŻKA → tabela ksiazka, encja WYPOŻYCZENIE → tabela wypozyczenie. Każda z tych encji ma swój klucz główny (np. czytelnik_id, ksiazka_id, wypozyczenie_id), czyli atrybut jednoznacznie identyfikujący rekord. To jest dokładnie to, co w dobrych praktykach projektowania baz danych (np. wg standardowych metodologii ERD używanych w SQL Server, MySQL Workbench czy Oracle Data Modeler) uważa się za podstawę poprawnego modelu danych. Moim zdaniem bardzo ważne jest rozróżnienie poziomów: encja to „typ obiektu” (tabela), atrybut to „cecha obiektu” (kolumna), a krotka/rekord to „konkretne wystąpienie obiektu” (pojedynczy wiersz). Na przykład: encja CZYTELNIK opisuje wszystkich możliwych czytelników biblioteki, atrybuty tej encji to imie, nazwisko, ulica itd., a jedna konkretna krotka w tabeli czytelnik opisuje jedną osobę, np. Jana Kowalskiego z ulicy Lipowej 5. W projektowaniu systemów bibliotecznych, systemów sprzedażowych, magazynowych czy w aplikacjach webowych z bazą danych zawsze zaczyna się właśnie od zidentyfikowania encji: klient, zamówienie, produkt, faktura itd. Dopiero potem dopisuje się atrybuty, ustala relacje (tak jak tu: czytelnik – wypożyczenie – książka) i definiuje klucze obce. To podejście jest zgodne z normalizacją i ogólnymi zasadami projektowania relacyjnych baz danych – pomaga uniknąć nadmiarowości danych i błędów logicznych w aplikacji.
W tym zadaniu kluczowe jest zrozumienie, jak na diagramie bazy danych odróżnić encje od pozostałych elementów modelu. Nazwy „czytelnik”, „wypozyczenie” i „ksiazka” to nie są pojedyncze dane, tylko typy obiektów, o których przechowujemy informacje. W relacyjnych bazach danych i w klasycznym modelu ER przyjmuje się, że takie prostokąty z nazwą u góry reprezentują encje, czyli odpowiedniki tabel. To jest punkt wyjścia do dalszego projektowania: określamy encje, ich atrybuty i relacje między nimi. Częsty błąd polega na myleniu encji z atrybutami. Atrybuty to cechy encji, czyli kolumny w tabeli, np. imie, nazwisko, tytul, autor, datawypozyczenia. One opisują konkretną encję, ale same w sobie nie są odrębnymi obiektami w modelu. Gdybyśmy uznali „czytelnik” albo „ksiazka” za atrybut, całkowicie zgubilibyśmy strukturę relacji i nie moglibyśmy poprawnie odwzorować zależności typu jeden-do-wielu czy wiele-do-wielu, które są standardem w dobrze zaprojektowanych bazach. Pojawia się też zamieszanie wokół krotek. Krotka (rekord, wiersz) to jedno konkretne wystąpienie encji, np. jeden konkretny czytelnik albo jedna konkretna książka w tabeli. Na diagramie logicznym nie pokazuje się pojedynczych krotek, tylko ogólny typ obiektu. Dlatego nazwy tabel nie mogą być krotkami – one reprezentują zbiór wszystkich możliwych rekordów danego typu. Z kolei pola to potoczna nazwa kolumn, a więc znowu mówimy o atrybutach, a nie o tabelach. Wiele osób używa słów „pola” i „atrybuty” zamiennie, co jest w miarę akceptowalne w luźnej rozmowie, ale w analizie modelu danych warto być precyzyjnym, bo inaczej łatwo pomylić poziom abstrakcji. Trzymając się dobrych praktyk projektowania relacyjnych baz danych, prostokąty z nazwami „czytelnik”, „wypozyczenie” i „ksiazka” interpretujemy jednoznacznie jako encje.