Heiner Kücker

Flexible Columns

Home

Java-Seite

Alaska-XBase++-Seite

Projekte

Philosophien
Techniken


Konzepte

   Artikelsystematik

   Semantisches_Netz

   Flexible_Columns

   Weiterentwicklung_Java

   Fehlerquellen

   Längencodierung

   Encoding

   Programming_by_Contract

   TimelineStructure
   Datenstruktur für
   Kalender oder
   Terminplaner

Sudoku

Kontakt /
Impressum


Links

SiteMap





Letzte Aktualisierung:
02.12.2001

Flexible Columns
----------------

Typischerweise sind die Tabellenstrukturen einer Datenbank statisch.
Flexible Columns bilden eine dynamische Struktur mit beliebig vielen
Feldern ohne Speicherplatzverschwendung für nicht benutzte Felder nach.

Dazu wird die horizontale Struktur eines Records auf eine vertikale
Tabellenstruktur umgebrochen.

Dieses Daten-Modell habe ich für ein Content-Management-System zur Verflechtung
von HTML-Templates mit Datenbank-Daten konzipiert und für den Prototypen auf
Basis DynaBeans mit HashMaps realisiert.

Eine ähnliche Lösung implementierte ich für ein Stücklistenprogramm Anfang der
90´er Jahre.

konventionelle Herangehensweise:
--------------------------------

+-------------+----------------+-------------------+-------------------+
| Primary-Key | Feld1          | Feld2             | Feld3             |
+-------------+----------------+-------------------+-------------------+
|           1 |a1              | b1                | c1                |
+-------------+----------------+-------------------+-------------------+
|           2 |a2              | b2                | c2                |
+-------------+----------------+-------------------+-------------------+


alternativ (flexibel)
---------------------

Herunterbrechen horizontal (Felder) auf vertikal (Records)

+-------------+----------------+-------------------+-------------------+
| Primary-Key | Primary-Key    | Feld-Descriptor   | Feld-Content      |
| technisch   | Record         |                   |                   |
+-------------+----------------+-------------------+-------------------+
|           1 |              1 | Feld1             | a1                |
+-------------+----------------+-------------------+-------------------+
|           2 |              1 | Feld2             | b1                |
+-------------+----------------+-------------------+-------------------+
|           3 |              1 | Feld3             | b2                |
+-------------+----------------+-------------------+-------------------+
|           4 |              2 | Feld1             | a2                |
+-------------+----------------+-------------------+-------------------+
|           5 |              2 | Feld2             | b2                |
+-------------+----------------+-------------------+-------------------+
|           6 |              2 | Feld3             | b3                |
+-------------+----------------+-------------------+-------------------+

Sinnvollerweise ist eine Library oder ein Tool als Wrapper über relationale
Datenbanken denkbar, welche die Funktionalität der Flexiblen Columns bereit-
stellt.

Bei der Verwendung in Applikationen muss durch die fehlende Möglichkeit der
Compile-Time-Validierung die Fehlerfreiheit mit Unit-Tests gesichert werden.

Nicht String-Werte müssen in einer String-Darstellung codiert werden.

Folgende Funktionalität ist mindestens notwendig:
-------------------------------------------------

1. Speichern Attribute

    setFlexColumn( <primary_key> , <secondary_key> , <value> )

2. Abfragen Attribute

    getFlexColumn( <primary_key> , <secondary_key> )

3. Löschen Attribute

    resetFlexColumn( <primary_key> , <secondary_key> )

4. Iterieren über Attribute eines virtuellen Records

    while ( attributes.hasNext() ) {
        out.println( key ) ;
        out.println( value ) ;
    }

5. Abfrage Anzahl Attribute

    getFlexColumnCount() ;

6. Verwendung der Attribute in WHERE-Klauseln

    SELECT FROM FLEXCOLTABLE WHERE getFlexColumn( <secondary_key> ) = <value>