Datendefinition

Inhaltsübersicht

 

Datendefinition. 1

6     Datendefinition. 1

6.1     Erstellen der Objekte. 1

6.2     Löschen der Objekte. 5

Aufgaben. 6

     

        

          

 

6      Datendefinition

 

 

         In  diesem   Kapitel  werden  wir  alle  SQL-Anweisungen  für

         die   Datendefinition   beschreiben.   Zuerst   werden   alle

         Datendefinitionsanweisungen  für  logische  Objekte  in  zwei

         Gruppen eingeteilt und erläutert. Die erste Gruppe beinhaltet

         die Anweisungen  zum Erstellen und die zweite die Anweisungen

         zum Löschen der logischen Objekte.

 

Zurück zum Inhaltsverzeichnis

 

 

6.1        Erstellen der Objekte

 

 

         Die  Organisation  der  Datenwerte  einer  Datenbank  basiert

         auf  einer Hierarchie  verschiedener  Objekte.  Dazu  gehören

         Tabellen, Spalten,  Reihen, Indexe  und die Datenbank selbst.

         Alle  diese  Objekte  werden  mit  den  Anweisungen  für  die

         Datendefinition erzeugt.

 

         In Kapitel  3 haben wir die Erstellung von Tabellen mit Hilfe

         von  frames gezeigt.  In diesem  Kapitel wird  die Erstellung

         der Tabelle  und weiterer  logischer Objekte  mit  Hilfe  von

         SQL-Anweisungen erklärt.

 

         Das  erste Objekt, das erzeugt werden muß, ist die Datenbank.

         Das Erzeugen der Datenbank wird mit Hilfe des Dienstprogramms

         createdb durchgeführt.  Dieses Dienstprogramm  ist in Kapitel

         15 beschrieben.

 

         Mit der  SQL-Anweisung CREATE  TABLE wird  eine  Tabelle  mit

         allen dazugehörigen Spalten und deren Datentypen erzeugt. Die

         Syntax dieser Anweisung hat zwei Formen:

 

 

         (1) CREATE TABLE tab_nam(sp_name1 sp_typ1[,sp_name2 sp_typ2,..])

                      [with-klausel]

 

         (2) CREATE TABLE tab_nam(sp_name1 sp_typ1[,sp_name2 sp_typ2,..])

                AS select_anw

                [with-klausel]

 

         tab_nam ist  der Name  der neuerstellten Tabelle. Die Tabelle

         kann ab der Version 6.3 maximal 300 Spalten haben. Jede Reihe

         der Tabelle  darf maximal  2008 Byte lang sein. Der Name kann

         gekennzeichnet sein. Vor dem Tabellennamen kann also der Name

         des Benutzers,  der die  Tabelle erstellt  hat,  stehen.  Der

         Tabellenname  darf nicht  mit dem  Zeichenpaar "ii" beginnen,

         weil  in INGRES  das Präfix  "ii" für  systeminterne  Dateien

         reserviert ist.

 

         sp_name1  ist der  Spaltenname; er muß innerhalb der Tabelle,

         in der  sich die  Spalte  befindet,  eindeutig  sein.  Dieser

         Name  kann auch  dadurch gekennzeichnet  sein,  daß  man  den

         Tabellennamen vor  den Spaltennamen setzt: tab_nam.sp_name1.

         Das Kennzeichnen  eines Spaltennamens  ist bei  den  Abfragen

         notwendig,  bei  denen  Tabellen,  die  gleichnamige  Spalten

         enthalten, miteinander verknüpft werden.

 

         sp_typ1 bezeichnet den Datentyp und das Verhalten des Systems

         während  des Einfügens  neuer Werte. Die möglichen Datentypen

         sind  in Kapitel  2  beschrieben.  Beim  Einfügen  der  Werte

         existieren drei  mögliche Angaben  für den Fall, daß für eine

         Spalte kein Wert explizit angegeben ist. Dies sind:

 

                      - WITH NULL,

                      - NOT NULL WITH DEFAULT    und

                      - NOT NULL NOT DEFAULT          .

 

         WITH  NULL besagt,  daß der  NULL-Wert  implizit  der  Spalte

         zugewiesen  wird.   Bei  NOT   NULL  WITH  DEFAULT  wird  der

         Standardwert  (0 für  Spalten mit  einem numerischen bzw. das

         Leerzeichen für  Spalten mit einem alphanumerischen Datentyp)

         eingefügt.  NOT NULL NOT DEFAULT verursacht die Ausgabe einer

         Fehlermeldung, falls  kein Wert  explizit angegeben  ist. Die

         Voreinstellung ist  WITH NULL.  Falls NOT NULL angegeben ist,

         wird NOT NULL NOT DEFAULT angenommen.

 

         with-klausel  beschreibt unterschiedliche Eigenschaften einer

         Tabelle. Diese Klausel fängt immer mit dem Schlüsselwort WITH

         und einer der folgenden Angaben an:

 

                        LOCATION = (...)          ,

                        [NO]JOURNALING      und

                        [NO]DUPLICATES.

 

         Die   Angabe    LOCATION   beschreibt    ein   oder   mehrere

         Plattenspeicherbereiche,   in  denen  die  erstellte  Tabelle

         gespeichert  wird. JOURNALING  verursacht die  Sicherung  des

         ursprünglichen  Inhalts   aller  modifizierten   Reihen  nach

         einer Datenmanipulationsanweisung,  während NOJOURNALING dies

         unterläßt. DUPLICATES erlaubt die Existenz identischer Reihen

         in einer Tabelle, während NODUPLICATES dies untersagt.

 

         Die zweite Form der CREATE TABLE-Anweisung unterscheidet sich

         von der  ersten durch  die Existenz  einer  SELECT-Anweisung,

         mit der  die erstellte  Tabelle zusätzlich mit den Reihen aus

         einer, in  der SELECT-Anweisung  angegebenen Tabelle  geladen

         wird.

 

         In  einer  Datenbank  können  mehrere  gleichnamige  Tabellen

         existieren,  falls sie  von verschiedenen  Benutzern erstellt

         wurden.  INGRES   unterscheidet  zwischen   öffentlichen  und

         privaten  Tabellen.  Die  öffentlichen  Tabellen  werden  von

         dem   Datenbankadministrator  und   die  privaten   von   den

         einzelnen  Benutzern   erstellt.  Auf  eine  private  Tabelle

         kann  grundsätzlich nur  der Benutzer,  der sie erstellt hat,

         zugreifen.

 

         Die Tabellen  der  Beispieldatenbank  aus  Kapitel  1  können

         mit der  CREATE TABLE-Anweisung  auf folgende  Weise erstellt

         werden:

 

         Beispiel 6.1

 

             CREATE TABLE abteilung

                    (abt_nr CHAR(4) NOT NULL ,

                     abt_name CHAR(20) NOT NULL,

                     stadt CHAR(15));

 

             CREATE TABLE mitarbeiter

                   (m_nr INTEGER NOT NULL ,

                    m_name CHAR(20) NOT NULL,

                    m_vorname CHAR(20) NOT NULL,

                    abt_nr CHAR(4));

 

             CREATE TABLE projekt

                   (pr_nr CHAR(4) NOT NULL ,

                    pr_name CHAR(25) NOT NULL,

                    mittel FLOAT8);

 

             CREATE TABLE arbeiten

                   (m_nr INTEGER NOT NULL ,

                    pr_nr CHAR(4) NOT NULL,

                    aufgabe CHAR(15),

                    einst_dat DATE);

 

         Hinweis.

         Alle interaktiven  SQL-Anweisungen, die  in diesem  Buch  als

         Beispiele gegeben  sind, können  bei INGRES  entweder mit dem

         interaktiven  SQL-System isql  oder  mit  dem  Dienstprogramm

         sql  erstellt   und  ausgeführt   werden.   isql  ist   eine

         frame-basierte  INGRES-Komponente,  die  entweder  mit  dem

         Betriebssystemkommando  isql  oder  durch  die  Auswahl  der

         Funktion  Queries und  der Unterfunktion  sql  im  INGRES/MENU

         aufgerufen wird.

         Das   Dienstprogramm    sql  hat   dieselbe   Funktionalität

         wie  isql  ,   ist  aber  batch-orientiert  und  damit  weniger

         benutzerfreundlich.  Dieses   Dienstprogramm  kann   mit  dem

         Betriebssystemkommando sql  aufgerufen werden.

 

         Mit der  Anweisungsfolge in Beispiel 6.1 werden vier Tabellen

         der  Beispieldatenbank erstellt.  Das Zeichen  ";" dient  als

         Begrenzer zwischen den SQL-Anweisungen.

 

         Zusätzlich zu  den schon  erwähnten Tabellen,  die  auch  als

         Benutzer-  bzw.  Basistabellen  bezeichnet  werden,  gibt  es

         spezielle  Tabellen,  die  Views  heißen.  Die  Basistabellen

         existieren  physikalisch, während  Views  virtuelle  Tabellen

         darstellen,  die  physikalisch  nicht  existieren  und  immer

         aus  der   (den)  darunterliegenden   Tabelle(n)   abgeleitet

         werden. Die  Anweisung CREATE  VIEW erzeugt  ein  neues  View

         aus  einer schon  existierenden  Basistabelle  mittels  einer

         SELECT-Anweisung. Weil  die SELECT-Anweisung  die  Basis  für

         CREATE  VIEW ist,  gehört CREATE VIEW eher zu den Anweisungen

         für   Datenmanipulationen  als   zu   den   Anweisungen   für

         Datendefinition. Aus  diesem  Grund  werden  wir  Views  erst

         dann behandeln,  wenn alle  Anweisungen für Datenmanipulation

         definiert und erklärt sind. Kapitel 11 ist ausschließlich dem

         Thema Views gewidmet.

 

         CREATE INDEX  ist die  Anweisung zur  Erstellung der  Indexe.

         Der  wichtigste Grund  für die  Erstellung eines  Index steht

         mit den  Abfragen in  Zusammenhang. Durch  die Existenz eines

         Index  können  die  Antwortzeiten  einer  Abfrage  wesentlich

         beschleunigt werden. CREATE INDEX hat folgende Form

 

               CREATE [UNIQUE] INDEX ind_name ON tab_name

                  (sp_1 [ASC|DESC] [sp_2 [ASC|DESC],...])

                     [with-klausel];

 

         Die ganze  Problematik der  Indexvergabe wird  in Kapitel  12

         ausführlich behandelt.

 

         Im   Unterschied  zu   den   meisten   anderen   relationalen

         Datenbanksystemen unterstützt  INGRES keine SQL-Anweisung zur

         Änderung der  Struktur von  Datenbankobjekten. Eine  Änderung

         der  Speicherstruktur der  Objekte  kann  mit  der  Anweisung

         MODIFY  durchgeführt werden,  die in  Kapitel 12  beschrieben

         ist.

 

Zurück zum Inhaltsverzeichnis

 

 

 

6.2        Löschen der Objekte

 

 

         Alle  SQL-Anweisungen, die  das  Löschen  der  Objekte  einer

         Datenbank veranlassen, haben folgende allgemeine Form:

 

                      DROP objekt obj_name;

 

         wobei  objekt  ein  Objekt der Datenbank ist und obj_name den

         Namen dieses Objektes darstellt.

 

         Mit der Anweisung

 

                      DROP TABLE tab_name;

 

         wird  eine  existierende  Tabelle gelöscht. Das Löschen einer

         Tabelle  bedeutet,  daß  sie aus dem  Systemkatalog  entfernt

         wird. Alle Reihen und Indexe, die dieser  Tabelle  angehören,

         werden ebenso gelöscht.

 

         Mit der Anweisung

 

                      DROP INDEX ind_name;

 

         wird  ein  existierender Index gelöscht.

 

         Mit der Anweisung

 

                      DROP VIEW view_name;

 

         wird  ein View gelöscht.

 

Zurück zum Inhaltsverzeichnis

 

 

 

Aufgaben

 

 

A.6.1     In  Beispiel  6.1 sind einige Spalten der vier erstellten

             Tabellen  mit der NOT NULL-Angabe definiert.  Für  welche

             Spalten ist diese Angabe unbedingt erforderlich  und  für

             welche nicht?

 

A.6.2   Warum  sind  die  Spalten  m_nr und abt_nr als CHAR-Werte

             (und nicht als numerische Werte) definiert?

 

A.6.3   Erstellen  Sie die Tabelle systeme, die folgende  Spalten

             enthält:

 

                   sys_name    -  alphanumerisch, max. 15 Zeichen

                   version        -  Ganzzahl     

                   hersteller     -  alphanumerisch, max. 20 Zeichen

                   ort              -  alphanumerisch, max. 20 Zeichen

 

A.6.4   Beschreiben  Sie  genau,  was passiert, wenn eine Tabelle

             mit der DROP TABLE-Anweisung gelöscht wird.

 

 

Zurück zum Inhaltsverzeichnis