Benutzer-Werkzeuge

Webseiten-Werkzeuge


se:datenbankentwicklung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
se:datenbankentwicklung [2008-09-14 16:52]
stefan
se:datenbankentwicklung [2014-04-05 11:42] (aktuell)
Zeile 20: Zeile 20:
     * Data Buffer Cache: Abgefragte oder modifizierte Daten, vermeidet physikalischen Zugriff auf Dateien, zuletzt bearbeitete Blöcke ​     * Data Buffer Cache: Abgefragte oder modifizierte Daten, vermeidet physikalischen Zugriff auf Dateien, zuletzt bearbeitete Blöcke ​
     * Redo Log Buffer: Redo-Informationen werden zwischengespeichert bis sie physikalisch geschrieben werden     * Redo Log Buffer: Redo-Informationen werden zwischengespeichert bis sie physikalisch geschrieben werden
-    * Dictionary Cache: Data Dictionary Informationen  +    * Dictionary Cache: Data Dictionary Informationen ​
     * Shared SQL Pool: Benutzerübergreifende Informationen (übersetzte SQL-Statements,​ Tabellenbeschreibungen,​ Stored Procedures) ​     * Shared SQL Pool: Benutzerübergreifende Informationen (übersetzte SQL-Statements,​ Tabellenbeschreibungen,​ Stored Procedures) ​
     * Large Pool: Optionaler Bereich zum Puffern von größeren I/​O-Operationen     * Large Pool: Optionaler Bereich zum Puffern von größeren I/​O-Operationen
Zeile 26: Zeile 26:
     * Mögliche Fehler: ''​unable to allocate shared memory, no free buffers in buffer pool'' ​   ​     * Mögliche Fehler: ''​unable to allocate shared memory, no free buffers in buffer pool'' ​   ​
     * Prozesskommunikation über Speicherbereiche     * Prozesskommunikation über Speicherbereiche
-    * speichert permanente Verwaltungsinformationen       ​+    * speichert permanente Verwaltungsinformationen ​     
   * Program Global Area: Speicher für jede Session (Prozess) individuell   * Program Global Area: Speicher für jede Session (Prozess) individuell
     * Größe wird bei Installation gesetzt: PGA-Aggregat-Größe kann angepasst werden, individuelle PGA-Größen werden automatisch angepasst     * Größe wird bei Installation gesetzt: PGA-Aggregat-Größe kann angepasst werden, individuelle PGA-Größen werden automatisch angepasst
Zeile 36: Zeile 36:
     * **Logische Strukturen** sind nur der DB bekannt     * **Logische Strukturen** sind nur der DB bekannt
     * **Physikalische Strukturen** sind die Dateien auf der Festplatte     * **Physikalische Strukturen** sind die Dateien auf der Festplatte
-    * **Recovery-bezogene Strukturen** (z.B. Redo-Logs und Backups) dienen der Wiederherstellung des Systems (z.B. nach Betriebssystemausfällen),​ werden in der Flash Recovery Area abgelegt      +    * **Recovery-bezogene Strukturen** (z.B. Redo-Logs und Backups) dienen der Wiederherstellung des Systems (z.B. nach Betriebssystemausfällen),​ werden in der Flash Recovery Area abgelegt ​    ​
   * Tablespaces   * Tablespaces
     * System- und Nutzdaten liegen im permanenten Tablespace     * System- und Nutzdaten liegen im permanenten Tablespace
-    * SYS hat SYSTEM als permanenten Tablespace, alle übrigen Benutzer USERS    ​+    * SYS hat SYSTEM als permanenten Tablespace, alle übrigen Benutzer USERS  
     * SYSTEM     * SYSTEM
       * Data Dictionary, Tabellen mit administrativen Informationen über die DB (in Schema SYS)            * Data Dictionary, Tabellen mit administrativen Informationen über die DB (in Schema SYS)     
Zeile 85: Zeile 85:
     * Sind einem User zugeordnet     * Sind einem User zugeordnet
     * Datenbankobjekt = Schemaobjekt     * Datenbankobjekt = Schemaobjekt
-  * Privilegien:​ System-/​Objekt-Privilegien   ​+  * Privilegien:​ System-/​Objekt-Privilegien ​ 
     * Rollen: CONNECT (verbinden und abfragen), RESOURCE (Objekte erzeugen), DBA (alles außer STARTUP und SHUTDOWN)     * Rollen: CONNECT (verbinden und abfragen), RESOURCE (Objekte erzeugen), DBA (alles außer STARTUP und SHUTDOWN)
   * Benutzer: interne (z.B. SYS, SYSTEM) und Datenbankbenutzer   * Benutzer: interne (z.B. SYS, SYSTEM) und Datenbankbenutzer
Zeile 97: Zeile 97:
     * SQL*Loader     * SQL*Loader
       * Methoden: conventional,​ direct, external tables       * Methoden: conventional,​ direct, external tables
-      * ''​sqlldr hr/hr DATA=dependents.dat CONTROL=dependents.ctl LOG=dependents.log''​       ​+      * ''​sqlldr hr/hr DATA=dependents.dat CONTROL=dependents.ctl LOG=dependents.log'' ​     
     * Dump     * Dump
       * ''​sqlplus SYSTEM/​password'' ​   ​       * ''​sqlplus SYSTEM/​password'' ​   ​
Zeile 104: Zeile 104:
         * ''​ALTER USER hrdev IDENTIFIED BY hrdev;'' ​     ​         * ''​ALTER USER hrdev IDENTIFIED BY hrdev;'' ​     ​
       * ''​expdp SYSTEM/​password SCHEMAS=hr DIRECTORY=dmpdir DUMPFILE=schema.dmp LOGFILE=expschema.log''​       * ''​expdp SYSTEM/​password SCHEMAS=hr DIRECTORY=dmpdir DUMPFILE=schema.dmp LOGFILE=expschema.log''​
-      * ''​impdp SYSTEM/​password SCHEMAS=hr DIRECTORY=dmpdir DUMPFILE=schema.dmp REMAP_SCHEMA=hr:​hrdev EXCLUDE=constraint,​ ref_constraint,​ index TABLE_EXISTS_ACTION=replace LOGFILE=impschema.log''​           ​+      * ''​impdp SYSTEM/​password SCHEMAS=hr DIRECTORY=dmpdir DUMPFILE=schema.dmp REMAP_SCHEMA=hr:​hrdev EXCLUDE=constraint,​ ref_constraint,​ index TABLE_EXISTS_ACTION=replace LOGFILE=impschema.log'' ​         
   * Backup und Recovery   * Backup und Recovery
     * Schützen aller DB-Dateien (Daten, Control, SPFILE, REDO LOG)     * Schützen aller DB-Dateien (Daten, Control, SPFILE, REDO LOG)
     * Sicherung der gesamten Datenbank in der Flash Recovery Area    ​     * Sicherung der gesamten Datenbank in der Flash Recovery Area    ​
-    * Recovery Manager (RMAN) bedienbar über Kommandozeile/​Script   ​+    * Recovery Manager (RMAN) bedienbar über Kommandozeile/​Script ​ 
     * Backup Retention Policy: Zwei vollständige Backups müssen vorgehalten werden, ARCHIVELOG: zusätzlich alle Logs für media recovery     * Backup Retention Policy: Zwei vollständige Backups müssen vorgehalten werden, ARCHIVELOG: zusätzlich alle Logs für media recovery
     * ARCHIVELOG schützt gegen Fehler des BS, der Oracle Instanz und der Media Disk     * ARCHIVELOG schützt gegen Fehler des BS, der Oracle Instanz und der Media Disk
Zeile 117: Zeile 117:
       * STARTUP MOUNT       * STARTUP MOUNT
       * ALTER DATABASE [NO]ARCHIVELOG;​       * ALTER DATABASE [NO]ARCHIVELOG;​
-      * ALTER DATABASE OPEN;       ​+      * ALTER DATABASE OPEN;      
     * Flashback Queries (Anzeige historischer Daten)     * Flashback Queries (Anzeige historischer Daten)
       * ''​SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP('​2005-04-04 09:​30:​00',​ '​YYYY-MM-DD HH:​MI:​SS'​) WHERE last_name = '​Chung';''​       * ''​SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP('​2005-04-04 09:​30:​00',​ '​YYYY-MM-DD HH:​MI:​SS'​) WHERE last_name = '​Chung';''​
Zeile 140: Zeile 140:
     * ''​DROP TABLESPACE TA [INCLUDING CONTENTS];''​     * ''​DROP TABLESPACE TA [INCLUDING CONTENTS];''​
     * Modi: Online/​Offline:​ ''​ALTER TABLESPACE TA [ONLINE | OFFLINE] [NORMAL | TEMPORARY | IMMEDIATE];''​     * Modi: Online/​Offline:​ ''​ALTER TABLESPACE TA [ONLINE | OFFLINE] [NORMAL | TEMPORARY | IMMEDIATE];''​
-      * {{:​se:​tablespacemodi.jpg|}}   ​+      * {{:​se:​tablespacemodi.jpg|}} ​ 
   * Datenbankobjekte/​Segmente:​ Tabellen, Indizes, Recovery-Informationen   * Datenbankobjekte/​Segmente:​ Tabellen, Indizes, Recovery-Informationen
     * Tablespaces sind in Segmente (Daten, Index, Rollback, temporär) unterteilt     * Tablespaces sind in Segmente (Daten, Index, Rollback, temporär) unterteilt
Zeile 146: Zeile 146:
     * Problem: Fragmentierung     * Problem: Fragmentierung
     * Segmente bestehen aus Extents (unteschiedlicher Größe)     * Segmente bestehen aus Extents (unteschiedlicher Größe)
-      * Anfangs-/​Folge-Extent     ​+      * Anfangs-/​Folge-Extent ​   
       * Die Festlegung der Anfangs-Extent-Größe erfolgt über den Parameter initial       * Die Festlegung der Anfangs-Extent-Größe erfolgt über den Parameter initial
       * Die Anzahl der bei der Erstellung eines Segments mit angelegten Folge-Extents wird mit dem Parameter minextents definiert.       * Die Anzahl der bei der Erstellung eines Segments mit angelegten Folge-Extents wird mit dem Parameter minextents definiert.
Zeile 154: Zeile 154:
       * ''​TRUNC TABLE''​ bewirkt Zurücksetzen des belegten Speichers (<> ''​DELETE FROM TABLE''​)       * ''​TRUNC TABLE''​ bewirkt Zurücksetzen des belegten Speichers (<> ''​DELETE FROM TABLE''​)
       * Festlegung der Parameter bei Erstellung des Tablespaces oder der DB-Objekte       * Festlegung der Parameter bei Erstellung des Tablespaces oder der DB-Objekte
-        * {{:​se:​storageclause.jpg|}}      +        * {{:​se:​storageclause.jpg|}} ​    ​
     * Extents bestehen aus Oracle-Datenblöcken (2KB)     * Extents bestehen aus Oracle-Datenblöcken (2KB)
       * Block-Kopf       * Block-Kopf
Zeile 161: Zeile 161:
         * Transaktionsdirectory (23 Byte pro Eintrag)         * Transaktionsdirectory (23 Byte pro Eintrag)
           * initrans (1 (default) - 255)           * initrans (1 (default) - 255)
-          * maxtrans         ​+          * maxtrans ​       
       * Block-Datenbereich       * Block-Datenbereich
         * Freibereich (Speicher für sich vergrößernde Datensätze)         * Freibereich (Speicher für sich vergrößernde Datensätze)
Zeile 185: Zeile 185:
       * Rumpf (Daten)       * Rumpf (Daten)
         * Spaltenlänge:​ 1 Byte (NUMBER, CHAR, DATE), 3 Byte (VARCHAR, VARCHAR2, LONG, RAW, LONG RAW)         * Spaltenlänge:​ 1 Byte (NUMBER, CHAR, DATE), 3 Byte (VARCHAR, VARCHAR2, LONG, RAW, LONG RAW)
-        * Spaltendaten           ​+        * Spaltendaten ​         
   * Dictionary Views: DBA_FREE_SPACE,​ USER_TABLESPACES,​ USER_SEGMENTS,​ USER_EXTENTS,​ USER_TABLES,​ USER_TS_QUOTAS ​   * Dictionary Views: DBA_FREE_SPACE,​ USER_TABLESPACES,​ USER_SEGMENTS,​ USER_EXTENTS,​ USER_TABLES,​ USER_TS_QUOTAS ​
   * Architektur   * Architektur
Zeile 191: Zeile 191:
       * SGA, PGA, Hintergrundprozesse       * SGA, PGA, Hintergrundprozesse
       * Definiert durch SGA, Files und DB-Prozesse       * Definiert durch SGA, Files und DB-Prozesse
-   ​* Hat eindeutige SID+      ​* Hat eindeutige SID
     * Orace Server-Prozesse     * Orace Server-Prozesse
       * Parsen und Ausführen von SQL, Lesen von DB-Blöcken aus Files            * Parsen und Ausführen von SQL, Lesen von DB-Blöcken aus Files     
Zeile 224: Zeile 224:
       * Modularisierte Anwendungsentwicklung       * Modularisierte Anwendungsentwicklung
       * Portabilität des PL/​SQL-Codes       * Portabilität des PL/​SQL-Codes
-      * Exception Handling        ​  ​   ​+      * Exception Handling ​          ​
   * PL/​SQL-Blöcke   * PL/​SQL-Blöcke
     * Aufbau     * Aufbau
Zeile 234: Zeile 234:
       * Anonymous       * Anonymous
       * Procedure       * Procedure
-      * Function      ​  ​+      * Function ​     
     * Speicherort:​ Server oder Anwendung     * Speicherort:​ Server oder Anwendung
   * Variablen   * Variablen
Zeile 252: Zeile 252:
         * referenziert mit führendem ''&'':​ Eingabe zur Laufzeit         * referenziert mit führendem ''&'':​ Eingabe zur Laufzeit
         * ''​ACCEPT varname PROMPT '​Text'''​         * ''​ACCEPT varname PROMPT '​Text'''​
-      * User Variable: deklariert mit ''​DEFINE'',​ referenziert mit ''&''​         ​+      * User Variable: deklariert mit ''​DEFINE'',​ referenziert mit ''&'' ​        ​
     * ''​%TYPE''​-Attribut:​ Datentyp einer Spalte/​Variable übernehmen (''​identifier table.column_name%TYPE;''​)     * ''​%TYPE''​-Attribut:​ Datentyp einer Spalte/​Variable übernehmen (''​identifier table.column_name%TYPE;''​)
-    * Mögliche Boolean-Werte:​ ''​TRUE,​ FALSE, NULL''​ (!)         ​+    * Mögliche Boolean-Werte:​ ''​TRUE,​ FALSE, NULL''​ (!)         ​
   * Lexikalische Einheiten   * Lexikalische Einheiten
     * Folgen von Zeichen, Zahlen, Whitespace und Symbolen     * Folgen von Zeichen, Zahlen, Whitespace und Symbolen
-    * Typen: Identifier, Delimiter, Literals, Comments ​     ​+    * Typen: Identifier, Delimiter, Literals, Comments ​    ​
   * SQL-Funktionen   * SQL-Funktionen
     * Nicht in PL/SQL verfügbar: ''​DECODE'',​ ''​GROUP''​-Funktionen ​   ​     * Nicht in PL/SQL verfügbar: ''​DECODE'',​ ''​GROUP''​-Funktionen ​   ​
Zeile 263: Zeile 263:
     * ''​INTO''​ wird benötigt     * ''​INTO''​ wird benötigt
     * Abfragen müssen genaue eine Zeile zurückliefern     * Abfragen müssen genaue eine Zeile zurückliefern
-    * Variablenpriorität:​ Spaltennamen -> lokale Variablen/​Parameter -> Tabellennamen     ​+    * Variablenpriorität:​ Spaltennamen -> lokale Variablen/​Parameter -> Tabellennamen ​   
   * Cursor   * Cursor
     * Zeiger auf den privaten Speicherplatz des Oracle-Servers     * Zeiger auf den privaten Speicherplatz des Oracle-Servers
     * Implizit: werden intern vom Oracle-Server erzeugt und verwendet (z.B. bei SQL-Statements)     * Implizit: werden intern vom Oracle-Server erzeugt und verwendet (z.B. bei SQL-Statements)
       * Attributes: ''​SQL%FOUND'',​ ''​SQL%NOTFOUND'',​ ''​SQL%ROWCOUNT'' ​   ​       * Attributes: ''​SQL%FOUND'',​ ''​SQL%NOTFOUND'',​ ''​SQL%ROWCOUNT'' ​   ​
-    * Explizit: werden vom Programmierer definiert und verwendet    +    * Explizit: werden vom Programmierer definiert und verwendet ​  ​
   * Kontrollstrukturen   * Kontrollstrukturen
     * ''​IF THEN - ELSIF - ELSE'''  ​     * ''​IF THEN - ELSIF - ELSE'''  ​
Zeile 289: Zeile 289:
         * dynamische Länge         * dynamische Länge
         * Zugriff über Index ''​table(1)''​         * Zugriff über Index ''​table(1)''​
-        * verfügbare Methoden: ''​EXISTS,​ COUNT, FIRST, LAST, PRIOR, NEXT, DELETE''​         ​+        * verfügbare Methoden: ''​EXISTS,​ COUNT, FIRST, LAST, PRIOR, NEXT, DELETE'' ​       
       * VARRAYs und Nested Tables       * VARRAYs und Nested Tables
   * Cursors   * Cursors
Zeile 297: Zeile 297:
     * entsprechen Pointern aus C (Referenz auf Speicherbereich)     * entsprechen Pointern aus C (Referenz auf Speicherbereich)
     * Datentyp der Curosr-Variablen ist ''​REF CURSOR''​     * Datentyp der Curosr-Variablen ist ''​REF CURSOR''​
-    * Cursor sind statisch, Cursor-Variablen sind dynamisch  +    * Cursor sind statisch, Cursor-Variablen sind dynamisch ​
   * Exceptions   * Exceptions
     * Exceptions sind Fehler, die während der Programmausführung auftreten     * Exceptions sind Fehler, die während der Programmausführung auftreten
Zeile 303: Zeile 303:
     * Behandlung: Handler oder weiterwerfen     * Behandlung: Handler oder weiterwerfen
     * Es sind mehrere Handler pro Block erlaubt, aber lediglich einer wird abgearbeitet.     * Es sind mehrere Handler pro Block erlaubt, aber lediglich einer wird abgearbeitet.
-    * Vorhandene Exceptions: z.B. ''​NO_DATA_FOUND,​ TOO_MANY_ROWS,​ ZERO_DIVIDE''​    +    * Vorhandene Exceptions: z.B. ''​NO_DATA_FOUND,​ TOO_MANY_ROWS,​ ZERO_DIVIDE'' ​  ​
     * nicht vordefinierte Exceptions behandeln: ''​PRAGMA EXCEPTION_INIT''​     * nicht vordefinierte Exceptions behandeln: ''​PRAGMA EXCEPTION_INIT''​
     * Funktionen: ''​SQLCODE,​ SQLERRM''​     * Funktionen: ''​SQLCODE,​ SQLERRM''​
     * Eigene Exceptions werfen: ''​RAISE''​     * Eigene Exceptions werfen: ''​RAISE''​
-    * Eigene Fehlermeldungen analog zum Oracle-Server ausgeben: ''​RAISE_APPLICATION_ERROR''​ (nur mit Nummer -20000 bis -20999)     ​+    * Eigene Fehlermeldungen analog zum Oracle-Server ausgeben: ''​RAISE_APPLICATION_ERROR''​ (nur mit Nummer -20000 bis -20999) ​   
   * Prozeduren und Funktionen   * Prozeduren und Funktionen
     * {{:​se:​proceduresvsfunctions.jpg|}}     * {{:​se:​proceduresvsfunctions.jpg|}}
Zeile 313: Zeile 313:
     * {{:​se:​anonymousblockssubprograms.jpg|}} ​   ​     * {{:​se:​anonymousblockssubprograms.jpg|}} ​   ​
     * Parameter     * Parameter
-   ​* Formal <> actual Parameters+      ​* Formal <> actual Parameters
       * Parameter Modes: ''​IN,​ OUT, IN OUT''​       * Parameter Modes: ''​IN,​ OUT, IN OUT''​
-      * {{:​se:​subprogramparameters.jpg|}}         ​+      * {{:​se:​subprogramparameters.jpg|}} ​       
       * Passing: positional, named, combination       * Passing: positional, named, combination
     * Kein Zugriff auf Host-Variablem ​   ​     * Kein Zugriff auf Host-Variablem ​   ​
Zeile 328: Zeile 328:
     * Vorteile: Modularisierung,​ einfachere Verwaltung, einfacheres Anwendungsdesign,​ Information Hiding, bessere Performance (Package wird komplett und nur einmal in den Speicher geladen), Overloading     * Vorteile: Modularisierung,​ einfachere Verwaltung, einfacheres Anwendungsdesign,​ Information Hiding, bessere Performance (Package wird komplett und nur einmal in den Speicher geladen), Overloading
     * Overloading:​ Beispiele im ''​STANDARD''​-Package (z.B. ''​TO_CHAR''​)     * Overloading:​ Beispiele im ''​STANDARD''​-Package (z.B. ''​TO_CHAR''​)
-    * Forward Declaration:​ Spezifikation eines Subprograms mit Semikolon abgeschlossen. Wird zu Beginn eines Blocks gemacht, damit Prozeduren auf die möglicherweise weiter unten im Quelltext implementierten Prozeduren zugreifen können.     ​+    * Forward Declaration:​ Spezifikation eines Subprograms mit Semikolon abgeschlossen. Wird zu Beginn eines Blocks gemacht, damit Prozeduren auf die möglicherweise weiter unten im Quelltext implementierten Prozeduren zugreifen können. ​   
     * Package Initialization Block: ''​BEGIN''​-Teil am Ende des package body zur Initialisierung von Variablen.     * Package Initialization Block: ''​BEGIN''​-Teil am Ende des package body zur Initialisierung von Variablen.
     * Package State     * Package State
Zeile 337: Zeile 337:
     * Execution Flow: parse (compile time), bind (compile time), execute, fetch     * Execution Flow: parse (compile time), bind (compile time), execute, fetch
     * Dynamic SQL ist ein String     * Dynamic SQL ist ein String
-    * ''​EXECUTE IMMEDIATE .. INTO .. USING''​     ​+    * ''​EXECUTE IMMEDIATE .. INTO .. USING'' ​   
   * Triggers   * Triggers
     * PL/​SQL-Block,​ der einer Tabelle, einem View, einem Schema oder einer Datenbank zugeordnet ist     * PL/​SQL-Block,​ der einer Tabelle, einem View, einem Schema oder einer Datenbank zugeordnet ist
Zeile 344: Zeile 344:
     * Trigger Events: ''​INSERT,​ UPDATE [OF], DELETE''​     * Trigger Events: ''​INSERT,​ UPDATE [OF], DELETE''​
     * Row Trigger: ''​FOR EACH ROW, :NEW, :​OLD''​     * Row Trigger: ''​FOR EACH ROW, :NEW, :​OLD''​
-    * {{:​se:​triggersvsprocedures.jpg|}}     ​+    * {{:​se:​triggersvsprocedures.jpg|}} ​   
  
 ===== Web ===== ===== Web =====
 +  * Voraussetzung:​ Database Access Descriptor (DAD) vorhanden
 +    * erzeugen mit DBA-Rechten
 +    * ''​DBMS_EPG.create_dad (dad_name => '​systemdad',​ path => '/​systemdad/​*'​);''​   ​
 +  * HTML-Ausgabe über HTP-/​HTF-Package ​
 +    * Vorteile: Aufbau auf PL/SQL, integriert SQL und HTML, kein zusätzliches Konfigurationsmanagement
 +  * Webapplikationen werden als Packages erstellt
 +    * HTML-Erzeugung mit PL/SQL Web Toolkit -> HTP/​HTF ​  
 +  * GET vs. POST
 +    * gut für Debugging, Programmstruktur wird offenbart, Bookmarks möglich, begrenzte Länge der URL   
 +  * mehrere Parameter (Array): ''​OWA_UTIL.ident_arr''​ (beginnt bei Index 2)
 +  * Arbeitsweise:​ Requests kommen anonym auf dem Server an -> Server liefert Seite aus
 +  * Kein Session-Konzept,​ kein Benutzerlogging
 +  * Designschritte
 +    * {{:​se:​designschritte.jpg|}}
 +    * Application Design
 +      * High Level Storyboard: Screens und Navigation (Site Map)
 +      * Detailed Storyboard
 +        * Alle Elemente, auf die der Benutzer klicken kann
 +        * Nicht alle Datenfelder,​ nur soviel um die ausgeführte Aktion erkennen zu können
 +        * Jeder Ausgang aus einer Seite wird mit einem Pfeil mit dem resultierenden Screen verbunden
 +      * Application Flow Diagram: Welche Daten werden zwischen den Seiten ausgetauscht (abwechselnd Procedure/​Screen)
 +        * Updates stellen aufgrund des fehlenden Sessionmanagements ein Problem dar (alte Daten müssen mit übergeben werden, um herauszufinden,​ ob jemand anderes die Daten in der Zwischenzeit bearbeitet hat)
 +      * Skeletons für Procedures/​Functions mit den ermittelten Parametern erzeugen  ​     ​
 +    * Page Design
 +      * Beispielseiten erstellen, Fokus auf Layout -> Designer machen lassen
 +      * Übliche Tipps: kein Splashscreen,​ Browsertests,​ wenige Grafiken, Web Standards, Formularelemente zur Einschränkung der Benutzereingaben,​ kontrastreicher Text        
 +    * Conversion
 +      * WebAlchemy, html2plsql -> statische Seiten
 +    * Business Logic
 +      * die statischen Seiten mit "​echter"​ Logik versehen ​  
 +    * Modularization  ​    
 +      * Trennung von HTML-Ausgabe und Logik
 +      * Header-/​Footer-Procedures etc.
 +      * eigene projektübergreifende Webkomponenten erzeugen  ​       ​
  
 ===== Modellierung ===== ===== Modellierung =====
 +  * Kenntnis der Grammatik <> Fähigkeit zur angemessenen Formulierung von Lösungen -> Berücksichtigung von Empfehlungen
 +    - Kann ein Informationselement näher beschrieben werden, ist es Basis für eine neue Objektklasse. Beschreibt es jedoch eine andere Objektklasse näher, ist es dieser als Attribut zuzuordnen.
 +    - Der Objektklassenname sollte sich von den tatsächlich in dieser Klasse zusammengefassten Objekten ableiten. Eine Objektklasse sollte nie nach ihrem identifizierenden Attribut benannt werden.
 +    - Gibt es Objekte einer Objektklasse,​ denen bezüglich eines Attributs mehrere Attributwerte zuzuordnen wären, so ist dieses Attribut als eigene Objektklasse zu modellieren. Dies gilt auch, wenn diese neue Objektklasse keine weiteren beschreibenden Attribute besitzt. Diese neu eingeführte Objektklasse wird über eine Beziehungsobjektklasse an die Ausgangsobjektklasse angebunden.
 +    - Besteht zwischen einem Attribut einer Objektklasse und einer anderen Objektklasse eine Beziehung, so ist dieses Attribut als eigene Objektklasse zu modellieren,​ auch wenn diese neue Objektklasse keine weiteren beschreibenden Attribute besitzt.
 +    - Kann ein Informationselement mehreren Objektklassen als beschreibendes Attribut zugeordnet werden, so ist für die Zuordnung die Objektklasse zu wählen, für die die Modellaussage die reale Ausgangssituation möglichst gut trifft.
 +    - Zusammengesetzte Objektklassenschlüssel sollten möglichst vermieden werden.
 +    - Bei einer Zusammenfassung von Objektklassen in einer Generalisation müssen Attributzuordnungen überprüft werden.
 +    - Für Beziehungen zwischen Objektklassen muss festgelegt werden: ​
 +      * die beteiligten Objektklassen und ihre Rollen
 +      * der Name der Beziehung
 +      * die verallgemeinerten Kardinalitäten der einzelnen Rollen (Beziehungstyp und Art der Objektbeteiligung).
 +    - Zwischen Objektklassen kann es mehr als eine Beziehung geben. Beziehungen zwischen Objektklassen heißen redundant, wenn sie in der gleichen Bedeutung gebraucht werden. Redundante Beziehungen sind zu eliminieren.
 +    - Mehrfachbeziehungen (Grad > 2) sind streng zu überprüfen,​ inwieweit sie durch zwei oder mehr Beziehungen geringeren Grades zu ersetzen sind.
 +  * Typische Modellierungssituationen ​
 +    * Formulierung von Wertebereichen
 +      * Geschickte Festlegung von Wertebereichs-Objektklassen kann den Gebrauchswert eines Datenmodells und des daraus entstehenden Tools deutlich erhöhen.
 +      * Für das Verständnis eines Modells ist es wichtig, die Bedeutung einzelner Objektklassen,​ auch durch treffende Namensgebung,​ möglichst gut abzugrenzen.
 +    * Formulierung von Hierarchien
 +      * Hierarchien drücken nichts anderes als Enthaltenseins-Beziehungen zwischen betrachteten Objekten aus.
 +      * Hierarchiebeziehungen können durch rekursive Beziehungen ausgedrückt werden.
 +      * Falls Objekte verschiedener Hierarchiestufen sich unterscheiden,​ kann dies durch eine entsprechende Generalisation ausgedrückt werden.
 +      * Die Teilobjektklassen der Generalisation müssen sich nicht notwendigerweise exakt an der Hierarchistruktur orientieren.
 +      * Es ist stets genau zu analysieren,​ ob die Objekte selbst die Hierarchie begründen, oder ob die Objekte einer oder mehreren bestehenden Hierarchien zugeordnet werden können.
 +    * Formulierung von Historie
 +      * Modellierung von Zeitaspekten kommt häufig vor. Es ist zu entscheiden,​ ob der Zeitaspekt beschreibenden Charakter hat oder zum Aufbau einer Historie dienen soll.    ​
 +      * Semantische Datenmodelle bestimmen nicht nur die Tabellenstruktur,​ sondern machen auch sehr differenziert Aussagen über die Tabellenschlüssel.
 +      * Eine Objektklasse Datum muss nicht notwendigerweise in eine Tabelle Datum übertragen werden.
 +    * Unterscheidung von Instanz und Typ
 +      * Instanz: Eine Instanz ist die letzte noch aufgelöste / wahrgenommene Objektart in einem Klassifikationsverfahren.
 +        * Der Grad der Wahrnehmung ist projektspezifisch und in einem Datenmodell evtl. uneinheitlich durch unterschiedliches Anforderungsprofil. ​   ​
 +    * Unterscheidung von Grad und Optionalität
 +      * Die Optionalitäten-Kennzeichnung von Rollen hat keine frei wählbare Reduzierung des Grades der Beziehung zur Folge.
 +      * Eine als optional gekennzeichnete Rolle kann nur in Ausnahmefällen mit NULL-Werten belegt werden.
 +    * Formulierung von Versionen
 +      * Eine angemessene Formulierung von Versionen gelingt mit Hilfe schwacher Objektklassen. ​   ​
 +    * Mehrfachbeziehung / Gerund
 +    * Flexible Zuordnung von Eigenschaften
 +      * Immer wieder sind Objekteigenschaften in einem Datenmodell zu berücksichtigen,​ die noch nicht in vollem Umfang bekannt sind, oder sich mit der Zeit verändern können.
 +      * Aufgabe der Datenmodellierung ist es, möglichst große Flexibilität in das Datenmodell '​einzubauen'​ und damit eine möglichst lange und wartungsarme Nutzung der Datenbankapplikation zu ermöglichen (Zukunftssicherheit).
 +      * Ziel ist bei künftigen Veränderungen in den Anforderungen Modifikationen in der Datenstruktur zu vermeiden und Anpassungen im Bereich der üblichen Datenbankbenutzung (Einfügen, Ändern, Löschen von Datensätzen) abzufangen.
 +      * Flexibilität im Datenmodell wird durch einen höheren Grad an Abstraktion erkauft.
 +  * klassische Datenstrukturen ​
 +    * Array
 +    * Array of Records
 +    * varianter Record
 +    * Liste
 +    * Baum
 +    * Graph
 +    * {{:​se:​klassischedatenstrukturen.jpg|}}  ​   ​
 +    * Vererbung (gerichteter,​ azyklischer Graph) ​   ​
 +    * {{:​se:​vererbung.jpg|}}
 +  * Änderungen am Datenmodell
 +    * Veränderung der Daten- / Wissensbasis:​ Einfügen, Aktualisieren,​ Löschen von Daten (Information)
 +    * Veränderung der Funktionalität:​ Ergänzen, Löschen von Objektklassen und / oder Beziehungen
 +    * Veränderung der Beschreibungskriterien:​ neue Sachverhalte bedingen eine Überarbeitung des Schemas  ​
 +    * {{:​se:​aenderungendatenmodell.jpg|}}
 +  * Modellierungskonzept
 +    * {{:​se:​modellierungsphasen.jpg|}}
 +    - Informationen über die reale Welt
 +    - semantisches Datenmodell
 +      * technische und Anwendungsrandbedingungen berücksichtigen
 +      * Ziel Redundanzfrieheit -> Normalisierung
 +      * Ziel Performance -> Denormalisierung  ​   ​
 +    - relationales Schema
 +    - physische Datenstruktur ​  
 +  * Fazit
 +    * Informationssysteme haben eine lange Lebensdauer und einen hohen Wert -> richtige Modellierung ist enorm wichtig -> Spezialisten einsetzen ​  
 +
  
 ===== ToDo ===== ===== ToDo =====
-  * Unterschiede Host- (auch Bind-/​Global-),​ User-, Substitution-Variablen+  * <del>Unterschiede Host- (auch Bind-/​Global-),​ User-, Substitution-Variablen</​del>​
se/datenbankentwicklung.1221403932.txt.gz · Zuletzt geändert: 2014-04-05 11:42 (Externe Bearbeitung)