     MODIFY(QL)                   DABA16                    MODIFY(QL)

     NAME
          modify - Modifizieren der Speicherungsstruktur  einer  Rela-
          tion

     UEBERSICHT
          modify relname [ to storage_structure [ on key1
                 [ : sortorder ]  { , key_n [ : sortorder ] }  ]
                 [ where [ fillfactor = n ]
                 [ , minpages = n ] [ , maxpages = n ] ] ]

     BESCHREIBUNG
          Relname wird in die spezifizierte Speicherungsstruktur modi-
          fiziert.  Nur der Relationseigentuemer darf die Relation mo-
          difizieren.

          Diese Anweisung wird benutzt, um die Leistungsfaehigkeit  zu
          erhoehen,  wenn grosse oder haeufig benutzte Relationen ver-
          arbeitet werden sollen.  Die  Systemrelationen  und  Sichten
          (Views) koennen mit modify nicht modifiziert werden.

          Folgende Speicherungsstrukturen (storage_structure) sind mo-
          eglich :

               isam - index-sequentielle Speicherungsstruktur
               cisam - isam, komprimiert
               hash - Random hash Speicherungsstruktur
               chash - hash, komprimiert
               heap - schluessellos unstrukturiert
               cheap - heap, komprimiert
               heapsort - heap sortiert, doppelte Tupel entfernt
               cheapsort - heapsort, komprimiert
               truncated - heap, alle Tupel geloescht (tupellos)
               same - Reorganisation

          Die Strukturen "heapsort", "cheapsort", "truncated" und "sa-
          me"  sind nur temporaere Zustaende und im eigentlichen Sinne
          keine Speicherungsstrukturen.


          In der Schrift "Anleitung fuer  den  Datenbankadministrator,
          Erstellen  und Pflegen der Datenbank" ist naeher erlaeutert,
          wie Speicherungsstrukturen bezueglich der benutzten Relatio-
          nen und der haeufigsten Anfragetypen auszuwaehlen sind.

          Alle Speicherungsstrukturen mit dem Praefix "c" sind kompri-
          miert  (extern  variabel lang gespeichert).  Der z.Z. imple-
          mentierte Kompressionsalgorithmus unterdrueckt rechtsbuendi-
          ge Blanks in Character-Daten.

          Wenn die on Phrase bei der Modifikation in isam, cisam, hash
          oder  chash  nicht  spezifiziert wird, werden als Schluessel
          automatisch die Werte der ersten  Domaene  verwendet.   Beim
          Modifizieren in heap oder cheap muss die on Phrase ausgelas-
          sen werden.  Wenn in  heapsort  oder  cheapsort  modifiziert
          wird, ist die on Phrase wahlfrei.

          Soll eine Relation sortiert werden  (isam,  cisam,  heapsort
          oder  cheapsort),  wird  als Sortierschluessel der in der on
          Phrase spezifizierte  verwendet.   Der  erste  Schluesselbe-
          standteil  der on Phrase ist der Haupt-Sortierbegriff.  Wei-
          tere spezifizierte Schluesselbestandteile sind  entsprechend
          der spezifizierten Folge nachgeordnete Sortierbegriffe.  Do-
          maenen, die in der on  Phrase  nicht  als  Sortierschluessel
          spezifiziert wurden, werden entsprechend ihrer Domaenenfolge
          als weitere Sortierbegriffe benutzt.


          Wenn eine Relation in heapsort  oder  cheapsort  modifiziert
          werden  soll,  kann die Sortierrichtung sortorder als ascen-
          ding (aufsteigend) oder descending (absteigend) spezifiziert
          werden.

          Standardannahme ist stets ascending.  Fuer jeden in  der  on
          Phrase spezifizierten Schluessel ist :

               key:descending

          angebbar, womit eine absteigende  Sortierfolge  fuer  diesen
          Schluessel  erreichbar  wird.   Zur Vollstaendigkeit sei er-
          waehnt, dass auch die ascending Spezifikation nach dem  Dop-
          pelpunkt  (":")  moeglich aber ueberfluessig ist, da sie die
          Standardannahme darstellt.  Descending kann mit dem Buchsta-
          ben "d" und ebenso ascending mit "a" abgekuerzt werden.

          Bei einer Modifikation zur  Speicherungsstruktur  same  wird
          die  Relation  reorganisiert. d.h. die Speicherungsstruktur,
          der Sortierschluessel und die Sortierordnung bleiben  erhal-
          ten.   Nach umfangreichen Aenderungen kann die Anordnung der
          Daten uneffektiv werden, so dass ein erneutes Erstellen oder
          das Reorganisieren der Schluesselstruktur sinnvoll ist.


          Fillfactor spezifiziert den  prozentualen  Fuellfaktor  (von
          1-100) jeder primaeren Datenseite, die (unter idealen Bedin-
          gungen) mit Tupel gefuellt werden soll.

          Fillfactor darf bei isam, cisam, hash und chash benutzt wer-
          den.   Sorgfalt ist bei der Verwendung grosser Fuellfaktoren
          notwendig, da eine ungleichmaessige Verteilung der  Schlues-
          selwerte  veranlassen  koennte, dass Ueberlaufseiten erzeugt
          werden.  Damit wuerde die Zugriffsleistung fuer die Relation
          gemindert werden.


          Minpages spezifiziert die minimale Anzahl von  Primaerseiten
          fuer hash- oder chash-Relationen.  Maxpages ist die maximale
          Anzahl von Primaerseiten, die eine hash- oder chash-Relation
          besitzen soll.

          Von minpages oder maxpages muss wenigstens ein Parameter an-
          gegeben werden.  Sind sowohl minpages als auch maxpages spe-
          zifiziert, darf minpages nicht groesser als maxpages sein.

          Folgende Standardannahmen fuer fillfactor, minpages und max-
          pages erfolgen :

                      _F_I_L_L_F_A_C_T_O_R   _M_I_N_P_A_G_E_S  _M_A_X_P_A_G_E_S

               hash   50           10        nach Bedarf
               chash  75           1         nach Bedarf
               isam   80           -         -
               cisam  100          -         -
           - : Als Argument unzulaessig



     BEISPIEL[E]
          /* Modifizieren der Relation "personal" in eine
                  index-sequentielle Speicherungsstruktur
                  mit "name" als Schluesseldomaene/*

          modify personal to isam on name

          /* Wenn "name" die erste Domaene der Relation
                  "personal" ist, wird das gleiche
                  Resultat erreicht durch :          */

          modify personal to isam

          /* Die gleiche Modifikation aber mit einer
                 geforderten Belegung der Primaerseiten
                 von 60%                              */

          modify personal to isam on name where fillfactor = 60




          /* Modifizieren der Relation "lieferung" in eine
                  hash Speicherungsstruktur mit "num"
                  und "menge" als Schluesseldomaenen */

          modify lieferung to chash on num, menge

          /* Die gleiche Modifikation aber mit einem
                  gewuenschten Belegungsgrad der
                  Primaerseiten von 75%, einem Minimum von 7
                  und einem Maximum von 43 Primaerseiten */

          modify lieferung to chash on num, menge
                  where fillfactor = 75, minpages = 7,
                  maxpages = 43

          /* Noch einmal die gleiche Modifikation aber mit
                  einem Minimum von 16 geforderten
                  Primaerseiten */

          modify lieferung to chash on num, menge
                  where minpages = 16




          /* Modifizieren der Relation "teile" in eine
                  heap Speicherungsstruktur           */

          modify teile to heap

          /* Modifizieren der Relation "teile" in heap aber
                  sortieren der Domaene "tnum" und dem
                  Entfernen doppelter Tupel */

          modify teile to heapsort on tnum

          /* Modifizieren der Relation "personal" in
                  aufsteigender Sortierfolge nach
                  "gebdat" (Geburtsjahr) und absteigender
                  Sortierfolge nach "gehalt" sowie dem
                  Entfernen doppelter Tupel */

          modify personal to heapsort on gebdat, gehalt:descending

     SIEHE AUCH
          modifyr(mutos), sysmod(mutos)
