Ein Schema ist ein Namensraum - eine logische Sache. Es wird verwendet, um die Namen von Datenbankobjekten zu organisieren. Es hat nichts damit zu tun, wie die Daten gespeichert werden.
Ein Tablespace ist eine physische Sache. Es ist ein Container für Daten und hat nichts mit der logischen Organisation der Datenbankobjekte zu tun.
Ein einzelnes Objekt (z. B. eine Tabelle) könnte über mehrere Tablespaces verteilt sein (abhängig vom verwendeten DBMS), aber es kann nur in einem einzigen Schema definiert werden. Die Tabelle schema_1.table_1
ist eine andere Tabelle als schema_2.table_1
- obwohl der "plain" Name derselbe ist, ist der voll qualifizierte Name anders und daher sind dies zwei verschiedene Tabellen.
Objekte, die im selben Schema organisiert sind, werden nicht notwendigerweise im selben Tablespace gespeichert. Und ein einzelner Tablespace kann Objekte aus verschiedenen Schemas enthalten.
Schemas (und Kataloge, die eine andere Ebene des Namespace sind) sind Teil der SQL-Sprache und sind im SQL-Standard definiert.
Tablespaces sind Teil des physischen Speichers und sind DBMS-spezifisch (obwohl fast alle DBMS ein solches Konzept unterstützen) und sind nicht Teil der SQL-Abfragesprache (wie vom SQL-Standard definiert). Sie werden jedoch über herstellerspezifische SQL/DDL-Stateme definiert und verwaltet.