Kurs podstawy SQL dla użytkowników Oracle - lekcja 3

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:

Metadane Oracle - SELECT z ALL_TABLES - słownika

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:

Metadane PostgreSQL - SELECT z information_schema.tables

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

Wróć do poprzedniej lekcji

2 Comments

  1. Cześć, czy to ostatnia lekcja z kursu?

    1. Marcin Badtke

      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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *