Heiner KückerFlexible 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>
|