AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbank mit Dynamischen Spalten
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbank mit Dynamischen Spalten

Ein Thema von sebi87 · begonnen am 11. Jul 2008 · letzter Beitrag vom 13. Jul 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: Datenbank mit Dynamischen Spalten

  Alt 11. Jul 2008, 10:35
Ich denke mir das so:

Tabelle1 (die "Zeilen" Deiner Matrix)

T1_ID
T1_Feld1
T1_Feld2 (eben alle Felder, die immer vorkommen)


Tabelle2 (die "Spalten"..)
T2_ID
T2_FK_T1 (Verweis auf die Zeile, z.B. mit Foreign Key Constraint auf T1_ID)
T2_Wert

jetzt kannst Du in "zwei Dimensionen" beliebige Zeilen und Spalten anlegen.
Wenn Du eine neue Spalte brauchst, legst Du also einfach statt neuer Spalten
in T1 neue Sätze in Tabelle2 an. Pro Zeile aus Tabelle 1 ein neuer Satz in
Tabelle2 mit der entsprechenden Zeilen-ID (T1_ID) der Zeile in T2_FK_T1.

Es existieren also in Tabelle2 AnzahlZeilen*AnzahlSpalten Sätze...

Damit hast Du Änderungen an der Struktur durch einfache Satzoperationen ersetzt.
Absolut flexibel. Wenn Du noch eine dritte Dimension benötigst, gibt es halt nach
gleichem Schema eine dritte Tabelle.... (Stichwort Normalisierung)
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

Re: Datenbank mit Dynamischen Spalten

  Alt 11. Jul 2008, 10:37
äh... man sollte in Tabelle2 noch eine Feld T2_Spaltennummer mitführen, dann sind auch Operationen unabhängig von der Zeile möglich....
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#13

Re: Datenbank mit Dynamischen Spalten

  Alt 11. Jul 2008, 10:43
Ich kann mir das irgedwie nicht so vorstellen wie ich das dann erstellen muss...

kannst du mir da irgendwie ein Beispiel mit zwei Tabellen zeigen?
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: Datenbank mit Dynamischen Spalten

  Alt 11. Jul 2008, 11:02
Du hast das Stichwort Matrix doch selbst gegeben.
Angenommen Du hast eine Tabelle mit 4 Zeilen und 4 Spalten

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

Wie adressierst Du einen bestimmten Wert? Indem Du Zeilennummer und Spaltennummer angibst.
Für die 11 z.B. "3" und "3" (oder 2/2 wenn Deine Zählung bei 0 beginnt)
Schau Dir Tabelle2 (mit der Spaltennummer) nochmal an. Da hast Du die Felder
T2_FK_T1 ("Zeilennummer") und T2_Spaltennummer. Die geben Dir Position in der Matrix.
Du speicherst also in einem Satz nicht nur den Wert, sondern auch seine Adresse.

Im Extremfall kannst Du also sogar auf Tabelle1 verzichten, nämlich wenn es keine Informationen außer dem Wert selbst gibt. Mit Tabelle1 ist es aber schicker, weil Du Zusatzinformationen zu einer Zeile ohne Redundanzen speichern kannst.

Wie das konkret aussieht, hängt von Deiner Datenbank bzw. Deiner Anwendung ab. Das hier ist nur
ein "Kochrezept"....
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#15

Re: Datenbank mit Dynamischen Spalten

  Alt 11. Jul 2008, 11:16
Wir haben ein solches System für eine polymorphe Produktdatenbank. Dort gibt es Produktklassen (z.B. Fernseher, Schrauben, Delphi-Updates etc.). Jede Produktklasse hat ein eigenes 'Tabellenlayout'. Um nun alle unterschiedlichen Produkte unter einen Hut (sprich Datenbank) zu bringen, haben wir ein Konzept implementiert, das dem von billa ähnelt. Natürlich haben wir noch unterschiedliche Datentypen, sowie Formatanweisungen, Einheiten ('m','mm','V' etc.), in einer separaten Tabelle, und jeder 'Spaltenwert' enthält zusätzlich noch die ID der Spaltendefinition.

Für jede Produktklasse haben wir zudem eine View 'View_<Produktklasse>', sodaß man schnell auf die 'Tabelle' zugreifen kann. Jede Änderung am "Tabellenlayout" einer Produktklasse erzeugt per Trigger eine neue View.

Über die INSERT/UPDATE/DELETE-Trigger der View realisieren wir Datenmanipulationen, sodaß unsere Metadaten nach außen hin völlig transparent sind. In der Tat haben alle Produktfamilien einige Eigenschaften gemein, z.B. Produktnummer, Version, Name, Beschreibung, Gültigkeitszeiraum etc., sodaß wir über ein
select * from View_AlleProdukte alle Produkte anzeigen können.

Wir haben über die Jahre die Erfahrung gemacht, das das eine sehr einfache und komfortable Art und Weise ist, mit sich dynamisch ändernden und polymorphen Daten zu arbeiten.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#16

Re: Datenbank mit Dynamischen Spalten

  Alt 11. Jul 2008, 11:45
Hmm...
Ich werde mir das nochmal anschauen.
Danke mal für die Lösungsvorschläge.


Grüßle
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.613 Beiträge
 
#17

Re: Datenbank mit Dynamischen Spalten

  Alt 11. Jul 2008, 12:16
Ganz andere Idee:

tblMatrix:
PK ID, FK ReferenzId, Column, Row, Value

ReferenzId zeigt auf den Datensatz, zu dem diese Matrix gehört.

Die Werte der Matrix sind mit ihrem Wert in Column und Row adressiert.
Zeile löschen: Delete from tblmatrix WHERE ReferenzId = Datensatznummer AND Row = Zeilennummer
Spalte löschen: Delete from tblmatrix WHERE ReferenzId = Datensatznummer AND Column = Zeilennummer

Edit Nachtrag: So beim durchlesen fällt mir ein, das Billa das schon Vorgeschlagen hatte... Man bin ich langsam heut
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#18

Re: Datenbank mit Dynamischen Spalten

  Alt 13. Jul 2008, 21:12
Vielen Dank für die zahlreichen Ideen.

Hab es jetzt so gelöst wie Billa vorgeschlagen hat und es funktioniert wirklich gut.


Grüßle

Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz