Metadane to informacje 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.
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ć.
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.
Idź do następnej lekcji
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.