Jaka jest różnica między katalogiem a schematem w relacyjnej bazie danych?

99

Kiedyś myślałem, że schemat jest obiektem „górnej otoki” przed samą bazą danych. Mam na myśli DB.schema.<what_ever_object_name_under_schema>.

Cóż, „opakowanie” katalogu jest teraz dość zagmatwane. Po co nam katalog? W jakim celu dokładnie powinien być używany katalog?

Stephan
źródło

Odpowiedzi:

75

Z relacyjnego punktu widzenia:

Katalog jest miejscem, w którym - między innymi - przechowywane są wszystkie różne schematy (zewnętrzne, koncepcyjne, wewnętrzne) i wszystkie odpowiadające im odwzorowania (zewnętrzne / koncepcyjne, koncepcyjne / wewnętrzne).

Innymi słowy, katalog zawiera szczegółowe informacje (czasami nazywane informacjami deskryptora lub metadanymi ) dotyczące różnych obiektów, które są interesujące dla samego systemu.

Na przykład optymalizator wykorzystuje informacje katalogowe o indeksach i innych fizycznych strukturach pamięci, a także wiele innych informacji, aby pomóc mu zdecydować, jak zaimplementować żądania użytkowników. Podobnie, podsystem bezpieczeństwa wykorzystuje informacje katalogowe o użytkownikach i ograniczeniach bezpieczeństwa do przyznawania lub odrzucania takich żądań w pierwszej kolejności.

An Introduction to Database Systems, wyd. 7, CJ Date, str. 69–70.


Z punktu widzenia standardu SQL:

Katalogi to nazwane kolekcje schematów w środowisku SQL. Środowisko SQL zawiera zero lub więcej katalogów. Katalog zawiera jeden lub więcej schematów, ale zawsze zawiera schemat o nazwie INFORMATION_SCHEMA, który zawiera widoki i domeny schematu informacyjnego.

Język bazy danych SQL , (proponowany poprawiony tekst DIS 9075), str. 45


Z punktu widzenia SQL:

Katalog jest często synonimem bazy danych . W większości baz danych SQL, jeśli zapytasz o widoki schematu informacyjnego, zobaczysz, że wartości w kolumnie „table_catalog” są odwzorowywane na nazwę bazy danych.

Jeśli zauważysz, że Twoja platforma używa katalogu w szerszym zakresie niż którakolwiek z tych trzech definicji, może to odnosić się do czegoś szerszego niż baza danych - klastra bazy danych, serwera lub klastra serwerów. Ale wątpię w to, skoro można to łatwo znaleźć w dokumentacji swojej platformy.

Mike Sherrill `` Cat Recall ''
źródło
184

Mike Sherrill „Cat Recall” dał doskonałą odpowiedź . Dodam po prostu jeden przykład: Postgres .

Klaster = instalacja Postgres

Podczas instalowania Postgres na komputerze ta instalacja jest nazywana klastrem . Termin „klaster” nie jest tu rozumiany w sensie sprzętowym wielu komputerów pracujących razem. W Postgres klaster odnosi się do faktu, że możesz mieć wiele niepowiązanych baz danych, wszystkie działające przy użyciu tego samego silnika serwera Postgres.

Słowo klaster jest również definiowane przez standard SQL w taki sam sposób, jak w Postgres. Ściśle przestrzeganie standardu SQL jest głównym celem projektu Postgres.

Specyfikacja SQL-92 mówi:

Klaster to zbiór katalogów zdefiniowany w ramach implementacji.

i

Dokładnie jeden klaster jest powiązany z sesją SQL

To tępy sposób powiedzenia, że ​​klaster to serwer bazy danych (każdy katalog to baza danych).

Klaster> Katalog> Schemat> Tabela> Kolumny i wiersze

Więc zarówno w Postgresie, jak iw standardzie SQL mamy następującą hierarchię zawierania:

  • Komputer może mieć jeden klaster lub wiele.
  • Serwer bazy danych to klaster .
  • Klaster ma katalogi . (Katalog = baza danych)
  • Katalogi mają schematy . (Schemat = przestrzeń nazw tabel i granica zabezpieczeń)
  • Schematy mają tabele .
  • Tabele mają rzędy .
  • Wiersze mają wartości zdefiniowane przez kolumny .
    Te wartości to dane biznesowe, na których zależy Twoim aplikacjom i użytkownikom, takie jak imię i nazwisko osoby, termin płatności faktury, cena produktu, wysoki wynik gracza. Kolumna definiuje typ danych wartości (tekst, data, liczba itd.).

Diagram przedstawiający pola zagnieżdżenia przedstawiające sposób, w jaki połączenie przez port prowadzi do klastra (serwera bazy danych), który zawiera jeden lub więcej katalogów (bazę danych), z których każdy zawiera jeden lub więcej schematów (przestrzeń nazw), z których każdy zawiera tabele wydziwianie.

Wiele klastrów

Ten diagram przedstawia pojedynczy klaster. W przypadku Postgres można mieć więcej niż jeden klaster na komputer hosta (lub wirtualny system operacyjny). Zwykle wykonuje się wiele klastrów w celu testowania i wdrażania nowych wersji Postgres (np .: 9.0 , 9.1 , 9.2 , 9.3 , 9.4 , 9.5 ).

Jeśli masz wiele klastrów, wyobraź sobie powielony diagram powyżej.

Różne numery portów umożliwiają współdziałanie wielu klastrów w tym samym czasie. Każdy klaster miałby przypisany własny numer portu. Zwykłe 5432jest tylko domyślne i możesz je ustawić samodzielnie. Każdy klaster nasłuchuje na swoim własnym przypisanym porcie dla przychodzących połączeń z bazą danych.

Przykładowy scenariusz

Na przykład firma może mieć dwa różne zespoły programistyczne. Jeden pisze oprogramowanie do zarządzania magazynami, podczas gdy drugi zespół tworzy oprogramowanie do zarządzania sprzedażą i marketingiem. Każdy zespół deweloperów ma własną bazę danych, błogo nieświadomą innych.

Ale zespół operacyjny IT podjął decyzję o uruchomieniu obu baz danych na jednym komputerze (Linux, Mac, cokolwiek). Więc na tym pudełku zainstalowali Postgres. Czyli jeden serwer bazy danych (klaster bazy danych). W tym klastrze tworzą dwa katalogi, katalog dla każdego zespołu programistów: jeden o nazwie „magazyn” i jeden o nazwie „sprzedaż”.

Każdy zespół programistów używa dziesiątek tabel o różnych celach i rolach dostępu. Dlatego każdy zespół programistów organizuje swoje tabele w schematy. Przypadkowo oba zespoły programistów śledzą dane księgowe, więc tak się składa, że ​​każdy zespół ma schemat o nazwie „księgowość”. Używanie tej samej nazwy schematu nie stanowi problemu, ponieważ każdy katalog ma własną przestrzeń nazw, więc nie ma kolizji.

Ponadto każdy zespół ostatecznie tworzy tabelę do celów księgowych o nazwie „księga główna”. Ponownie, bez kolizji nazw.

Możesz myśleć o tym przykładzie jako o hierarchii…

  • Komputer (skrzynka sprzętowa lub serwer zwirtualizowany)
    • Postgres 9.2 klaster (instalacja)
      • warehouse katalog (baza danych)
        • inventory schemat
          • [… Kilka tabel]
        • accounting schemat
          • ledger stół
          • [… Kilka innych tabel]
      • sales katalog (baza danych)
        • selling schemat
          • [… Kilka tabel]
        • accounting schemat (przypadkowo taka sama nazwa jak powyżej)
          • ledger tabela (przypadkowo taka sama nazwa jak powyżej)
          • [… Kilka innych tabel]
    • Postgres 9.3 grupa
      • [… Inne schematy i tabele]

Oprogramowanie każdego zespołu deweloperskiego nawiązuje połączenie z klastrem. Robiąc to, muszą określić, który katalog (baza danych) jest ich. Postgres wymaga połączenia się z jednym katalogiem, ale nie jesteś ograniczony do tego katalogu. Ten początkowy katalog jest tylko domyślnym, używanym, gdy w instrukcjach SQL pomijana jest nazwa katalogu.

Więc jeśli zespół programistów kiedykolwiek będzie musiał uzyskać dostęp do tabel innego zespołu, może to zrobić, jeśli administrator bazy danych nadał im takie uprawnienia . Dostęp odbywa się z jawnym nazewnictwem we wzorcu: catalog.schema.table . Jeśli więc zespół „magazynu” musi zobaczyć księgę innego zespołu (zespołu „sprzedaży”), pisze instrukcje SQL za pomocą sales.accounting.ledger. Aby uzyskać dostęp do własnej księgi, po prostu piszą accounting.ledger. Jeżeli mają dostęp do obu ksiąg w tym samym kawałku kodu źródłowego, mogą wybrać, aby uniknąć nieporozumień przy tym własnego (opcjonalnie) nazwę katalogu, warehouse.accounting.ledgerw porównaniu sales.accounting.ledger.


Tak poza tym…

Możesz usłyszeć słowo schemat używane w bardziej ogólnym sensie, oznaczającym cały projekt struktury tabeli konkretnej bazy danych. Z kolei w standardzie SQL słowo to oznacza konkretnie określoną warstwę w Cluster > Catalog > Schema > Tablehierarchii.

Postgres używa zarówno bazy danych słów, jak i katalogu w różnych miejscach, takich jak komenda CREATE DATABASE .

Nie wszystkie systemy baz danych zapewniają tę pełną hierarchię plików Cluster > Catalog > Schema > Table. Niektóre mają tylko jeden katalog (bazę danych). Niektóre nie mają schematu, tylko jeden zestaw tabel. Postgres to wyjątkowo potężny produkt.

Basil Bourque
źródło
8
Jeśli tak ...Catalog > Schema..., czy ktoś może mi powiedzieć, dlaczego węzły „Catalog” i „Schema” w pgAdmin (UI PostgreSQL) są węzłami rodzeńskimi, a nie węzłem schematu jako węzłem podrzędnym katalogu?
The Red Pea
6
Ten węzeł „Schemat” należy do Ciebie, ale węzeł „Katalogi” nie. Węzeł „Katalogi” ma dokładnie dwa elementy: (1) PostgreSQL (pg_catalog), katalog systemowy, dziesiątki „pg_” tabel, które przechowują definicje metadanych z baz danych, takich jak pg_index, pg_triggeri pg_constraint. (2) ANSI (information_schema), widok tylko do odczytu tego samego katalogu systemowego zdefiniowanego przez standard SQL jako information_schema. Lepszą nazwą węzła „Katalogi” w pgAdmin może być „System” lub „Tabele systemowe”.
Basil Bourque
Dzięki. „Nie wszystkie systemy baz danych zapewniają tę pełną hierarchię Klaster> Katalog> Schemat> Tabela.” Zastanawiam się, jak to jest w przypadku mysql i SQL Server?
Tim
+1. Czy wszystkie tabele w schemacie mają ten sam schemat relacyjny (tj. Ten sam zestaw atrybutów i / lub ten sam zestaw ograniczeń)? Czy mógłbyś również zobaczyć moje pytanie stackoverflow.com/questions/48232448/… ? Dzięki.
Tim
1
@Tim Schemat to po prostu przestrzeń nazw oddzielająca grupy tabel, podobnie jak foldery są przestrzenią nazw porządkującą pliki w systemie plików (z wyjątkiem braku zagnieżdżania schematów). Tabele przechowują dane aplikacji jako atrybuty / kolumny według wierszy.
Basil Bourque