Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

AW: Record (mit Array) -> Datenbank / IBExpert

  Alt 31. Okt 2013, 14:22

Bzw. schon mal eine Frage zu dem Bsp von Hansa:
Code:
CREATE TABLE ARRAYTABLE (
    ID              INTEGER NOT NULL,
    ID_STAMMTABELLE INTEGER NOT NULL,
    ARRAYINDEX      SMALLINT NOT NULL,
    ARRAYWERT       DECIMAL(10,2) DEFAULT 0
);
Korrigiert mich, falls ich irgendwo daneben liege:

1) ID_STAMMTABELLE ist die "Referenz" zu den Hauptdaten, also wenn ich an die Array-Daten kommen will, nehme ich mir diese (eindeutige) ID_ST aus der Haupttabelle und suche im ArrayTable in der Spalte ID_STAMMTABLE danach und hole mir von dieser die Daten die ich will.

2a) Ist mit ID dann eine "zufällige", eindeutige Zahl gemeint (die nur von der DB benötigt wird wegen der Eindeutigkeit eines Datensatzes),
ODER
2b) soll hier sozusagen der Array-Name ("A", "B") hinein (und demnach alle Arrays (A[0..1], B[0..1], ... in diese eine Tabelle -> siehe unten).

3) Wird die DB durch das mitschleppen der Array-Indizes nicht unnötig groß? Wenn ich überlege: 100.000 Datensätze mit etwa 20 [0..1] Arrays und ein paar [0..1, 0..4, 0..4] Arrays, da kommen einige Indizes zusammen.
Also : 1. ja, ID_STAMMTABELLE ist die Referenz. 2. Die ID ist die normalerweise von einem Trigger erzeugte ID der einzelnen Datensätze in der Tabelle.

Ich nehme Beispiel Artikel. Art.Nr. ist 100 und der hat die ID 111 Angenommen man will maximal 10 Array-Werte haben, braucht für den Artikel aber nur 3 Array-Werte <> 0. Die Array-Tabelle würde dann so aussehen : ID aus Generator von Trigger. ID_STAMMTABELLE wäre 111. Belegt werden Indizes 1,3,5 mit den Werten 10,30,50. Das sind dann 3 Datensätze. Mit Delphi Array wären es quasi 10. Jaja, die ID wird eben auch in der DB noch mitgeschleppt.

ID ist dann der Primary Key. ID_STAMMTABELLE ein Foreigne Key, der auf die Stammtabelle zeigt und zwar im Bsp. den Wert 111 hat. Dann am besten noch ein Unique setzen, zusammengesetzt aus ID_STAMMTABELLE und ARRAYINDEX, um das Ding eindeutig zu halten. Und, falls gewünscht noch ein ON DELETE CASCADE, damit alle Arraydaten mitgelöscht werden, wenn ein Datensatz in der Stammtabelle gelöscht wird. Sonst bleiben in der DB Leichen zurück beim löschen. War das jetzt alles ?

Zugriff wäre dann z.B. so :

Code:
SELECT ARRAYWERT FROM ARRAYTABLE WHERE ARRAYINDEX = 3 AND ID_STAMMTABELLE = 111
Das würde dann 30 liefern.
Gruß
Hansa
  Mit Zitat antworten Zitat