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
Nächste Überarbeitung Beide Seiten der Revision
se:datenbankentwicklung [2008-09-14 16:52]
stefan
se:datenbankentwicklung [2008-09-14 18:24]
stefan
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 =====
se/datenbankentwicklung.txt · Zuletzt geändert: 2014-04-05 11:42 (Externe Bearbeitung)