Um ein Schema anzulegen, können Sie den Befehl CREATE SCHEMA verwenden:
test=# \h CREATE SCHEMA Command: CREATE SCHEMA Description: define a new schema Syntax: CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ] CREATE SCHEMA AUTHORIZATION username [ schema_element [ ... ] ]
Versuchen wir nun zwei Schemata anzulegen:
test=# CREATE SCHEMA produktion; CREATE SCHEMA test=# CREATE SCHEMA sales; CREATE SCHEMA
Die entsprechenden Schemas können jetzt wie Unterverzeichnisse verwendet werden. Das ermöglicht es, Tabellen, die den gleichen Namen tragen in verschiedenen Schemas zu organisieren:
test=# CREATE TABLE produktion.t_mitarbeiter (id int4, name text, stundensatz boolean); CREATE TABLE test=# CREATE TABLE sales.t_mitarbeiter (id int4, name text, filiale int4, umsatz numeric); CREATE TABLE
Tabellen, die Informationen über die in der Produktion tätigen Mitarbeiter speichern sollen, werden anders aussehen als Tabellen, die Informationen über Vertriebsmitarbeiter enthalten. Auf den ersten Blick mag es absurd wirken, Tabellen mit dem offensichtlich gleichen Namen anzulegen - dem ist aber nicht so: In großen Unternehmen kommt es oft vor, dass eine Datenbank Hunderte oder gar Tausende von Tabellen enthält. Es kann sehr leicht passieren, dass zwei Abteilungen Tabellen benötigen, die den selben Namen tragen. In solchen Fällen kann man Schemas verwenden, um zu vermeiden, dass sich verschiedene Abteilungen um einen Namen 'streiten'. Das kommt öfter vor als man denkt. In Kundenprojekten haben wir Datenstrukturen gesehen, die gerne mal 1.500 Tabellen oder mehr enthalten. In solchen Fällen ist Organisation der Schlüssel zum Erfolg.
Schemas sind wie bereits erwähnt eine Art Unterverzeichnis zur Organisation von Tabellen. Oft wird gefragt, ob es möglich ist, Schemas zu schachteln. Die Antwort auf diese Frage ist mit nein zu beantworten:
test=# CREATE SCHEMA sales.europe; ERROR: syntax error at or near "." at character 20 LINE 1: CREATE SCHEMA sales.europe;