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> |