Wstęp
Metadane to informacje o danych oraz o strukturze bazy danych. Z tej lekcji dowiesz się jak je odczytywać w Oracle, PostgreSQL i SQL Server.
Co to są metadane?
Motor bazy danych, aby poprawnie obsługiwać Twoją bazę danych, potrzebuje informacji o niej. Musi wiedzieć jak znaleźć poszukiwane przez Ciebie dane w plikach bazy danych. Na przykład tabelę dual z poprzedniej lekcji.
Trzeba pamiętać, że dane w bazie danych zapisywane są tam gdzie jest wolne miejsce. Innymi słowy fizyczna struktura bazy danych przypomina bezładny stos.
Skoro najlepszym miejscem do przechowywania danych jest baza danych, to informacje o niej również trzymane są w bazie danych. W specjalnych tabelach, których zawartość może być trudno zrozumiała dla człowieka. Są one zoptymalizowane na szybkość obsługi.
Jest to implementacja jednej z reguł twórcy modelu relacyjnego: Edgara Franka Codd’a. Wszystkie informacje o relacyjnej bazie danych muszą być wartością w jakiejś tabeli.
Informacje o danych nazywają się metadane.
Może się zdarzyć sytuacja, że będziesz pracować z bazą danych o której strukturze nic nie wiesz. Wtedy warto potrafić czytać metadane aby tę strukturę odkryć.
Co to jest słownik w Oracle?
Jak wspomniałem, wewnętrzne tabele Oracle są silnie zoptymalizowane, przez co mało czytelne dla człowieka.
Aby umożliwić człowiekowi przyjazny dostęp do metadanych Oracle zaimplementował słownik. Z angielska dictionary.
Słownik, przy pomocy 3 grup widoków (co to widok będzie w kolejnych lekcjach), tłumaczy silnie zoptymalizowane dane tabel wewnętrznych na informacje czytelne dla człowieka.
Każda z grup ma swój specyficzny przedrostek określający grono odbiorców:
- DBA_ – są to widoki dla administratora. Zawierają informacje dotyczące całej bazy danych. Jeśli Twoje konto w bazie danych nie ma uprawnień do ich odczytu dostaniesz informację, że nie istnieją. Czyli błąd ORA-00942. To standardowe zachowanie Oracle – nie masz do czegoś uprawnień to nie istnieje dla Ciebie. Na przykład DBA_TABLES.
- USER_ – są to widoki pokazujące informacje o należących do Twojego schematu obiektach. Na przykład tabelach: USER_TABLES. Co to schemat będzie w kolejnych lekcjach.
- ALL_ – są to widoki pokazujące informacje o obiektach do których Twoje konto ma uprawnienia. Na przykład ALL_TABLES. Czyli obiekty niekoniecznie należą do Twojego schematu, ale na mocy posiadanych uprawnień możesz z nich korzystać.
Widoki słownika zabezpieczają Cię przed zmianami w strukturze tabel wewnętrznych. Te mogą zmienić się z wersji motoru na wersję. Widoki słownika zachowają wsteczną kompatybilność. Jest to gwarantowane przez producenta motoru.
Z poprzedniej lekcji wiesz jak odczytać wszystkie dane z tabeli. Pamiętasz? Tak, chodzi o gwiazdkę. Napisz zapytanie odczytujące wszystkie dane z widoku all_tables. Pokaże Ci wszystkie tabele, w Twojej bazie danych, do których masz dostęp.
Na przykład takie:
SELECT * FROM all_tables;
Jeśli używasz SQL Developera to zobaczysz coś podobnego do:

Brawo! To Twoje pierwsze zapytanie zwracające dane ze słownika.
Zwróć uwagę, że wszystkie zwrócone napisy składają się z wielkich liter. Jest to standard w Oracle. Nawet jeśli obiekt, na przykład tabela, został utworzony komendą składającą się z małych liter, w słowniku nazwa obiektu zapisana została wielkimi.
Co to jest information_schema?
Każdy motor bazy danych ma swoje unikalne tabele wewnętrzne. Każdy ma też swój unikalny sposób prezentowania informacji w nich zawartych.
W PostgreSQL jest to katalog – pg_catalog. W SQL Server są to tabele systemowe z przedrostkiem sys.
Oba te motory mają, również zaimplementowane standardowe rozwiązanie ANSI o nazwie information_schema.
Standard ANSI określa jakie informacje o bazie danych mają się w nim znaleźć. Dzięki temu możesz pisać kod korzystający z metadanych i przenaszalny pomiędzy motorami baz danych.
Oprócz Oracle 😉
Chcąc odczytać informacje o tabelach bazy danych, w innych niż Oracle motorach, wydaj taką komendę:
SELECT * FROM information_schema.tables;
Jeśli, podobnie jak ja, do podłączenia do PostgreSQL używasz psql z terminala, to dostaniesz coś podobnego do:

Przypatrz się obu wynikom: temu z Oracle i temu z PostgreSQL. Czy są czytelne? Czy nie przeszkadza Ci zbyt duża ilość informacji? Czy znaczenie nagłówków – nazw kolumn – jest dla Ciebie jasne?
Jeśli nie to idź do następnej lekcji, a dowiesz się jak to zmienić.
Podsumowanie
Z tej lekcji wiesz jak i po co korzystać z metadanych w Oracle, PostgreSQL i SQL Server. Aby dowiedzieć się do jakich widoków słownika masz dostęp w Oracle należy odczytać widok o nazwie dictionary.
Masz już dość wiedzy aby napisać takie zapytanie samodzielnie. Zrób zrzut ekranu i pochwal się swoim osiągnięciem na discordzie. Dedykowany serwer: Marcin Badtke – bazy danych i SQL.
Gratuluję Ci! Właśnie ukończyłaś/eś trzecią lekcję darmowej edycji mojego kursu 'SQL dla użytkowników Oracle – od początku’. Skomentuj poniżej jak Ci się podobała.
Skąd dowiedzieć się tabela ma kolumny? Jak odczytać ich część? Chodź do następnej lekcji to zobaczysz.
Cześć, czy to ostatnia lekcja z kursu?
Cześć Aniu,
póki co ostatnia. Wznowię prace nad kursem za jakieś 2 miesiące. Wtedy zaczną pojawiać się kolejne lekcje. Równolegle z wideo na moim kanale YouTube: https://www.youtube.com/@marcinbadtke. Zapraszam do subskrybowania wtedy dowiesz się o nowych materiałach natychmiast po ich publikacji.
Pozdrawiam,
Marcin.