Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankstruktur - wie speichern? (https://www.delphipraxis.net/202350-datenbankstruktur-wie-speichern.html)

NoGAD 24. Okt 2019 08:27

Datenbank: Absolute Database (ABS) • Version: 7.91 • Zugriff über: SQL

Datenbankstruktur - wie speichern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
(Absolute_Database (http://www.componentace.com) ist eine Embedded DB, welche ohne Treiber o.ä. auskommt.)


Mein Szenario ist wie folgt:

In verschiedene TStringGrids werden Eingaben gemacht, diese sind Uhrzeitgebunden. Die Taktung ist frei skalierbar, ob der Intervall nun 15 Minuten pro Stunde, stündlich oder minütlich erfolgt, ist dem Anwender überlassen. Im Nachhinein kann der Anwender diesen Intervall nun auch wieder ändern, wobei die Datenstruktur sich aber anpassen müsste. Alternativ müsste ich die DB neu erstellen und die Zeiten korrigieren.

Daher suche ich einen Weg, die anfallenden Daten unabhängig der GUI zu speichern.

Beispiel:

 
[tr]
[td]Uhrzeit[/td]
[td]Name[/td]
[td]Dauer[/td]
[td]Terminart[/td]
[td]Anwesend[/td]
[/tr]
[tr]
[td]07:00[/td]
[td]Max Mustermann[/td]
[td]15 Minuten[/td]
[td]Irgendwas[/td]
[td]Ja[/td]
[/tr]
[tr]
[td]07:15[/td]
[td]Gundela Gaukel[/td]
[td]10 Minuten[/td]
[td]Glückskreuzer klauen[/td]
[td]Nein[/td]
[/tr]
[tr]
[td]07:30[/td]
[td]Gustav Gans[/td]
[td]1 Minute[/td]
[td]Glückskreuzer finden[/td]
[td][/td]
[/tr]

(Warum funktioniert die Tabelle nicht? / Siehe Screenshot)

Die Zeiten sind momentan Basis der Speicherung. Datum+Uhrzeit+ID des StringGrids z.B. verwende ich für die Speicherung in der DB.
Wird es nun umgestellt auf einen anderen Intervall, weil die Bestellzyklen sich ändern, sollten die Daten in der DB auch flexibel sein, und sich anpassen. Bei einem Wechsel von 15 Minuten auf 10 Minuten wäre in meinem Fall auch die zweite Datenzeile weg, weil es kein 7:15 Uhr mehr gäbe.

Gibt es dazu eine Idee?

LG Mathias

jobo 24. Okt 2019 08:58

AW: Datenbankstruktur - wie speichern?
 
Also die Tabellenstruktur kann man nicht so gut lesen, vielleicht kannst Du das korrigieren.
Laut Schaubild muss Deine Tabellenstruktur nicht geändert werden, nur die Zeitangaben.
Du suchst also keine Strukturänderung, sondern ein Update Statement.

Wie Du genau mit Datensätzen umgehen willst, wo mehrere Ereignisse in ein Intervall fallen, musst Du überlegen. Mir ist der Sinn des Intervalls auch nicht klar.

Nur mal als Gedanke:
Wenn du ganz schlicht die echte Zeit der Erfassung speicherst, notfalls mit Sekunden und Hundertstel oder noch genauer, hast Du beste Genauigkeit. Daraus kannst Du jedes beliebige Intervall machen, wenn Du draufschaust und abfragst und die erfasste Realzeit gegen eine definierte Intervallzeit verrechnest. Das kann z.B. als berechnete Spalte erfolgen im Select Statement.

P.S: Nochmal zum Intervall, was hat es mit dem Grid / GUI zu tun?
Und: gibt es in abs sowas wie Trigger oder Defaultwerte für Spalten (also dann z.B. für die echte Erfassungszeit)?

p80286 24. Okt 2019 09:04

AW: Datenbankstruktur - wie speichern?
 
Zitat:

Zitat von NoGAD (Beitrag 1450165)
Im Nachhinein kann der Anwender diesen Intervall nun auch wieder ändern, wobei die Datenstruktur sich aber anpassen müsste.

Wieso sollte sich die Struktur ändern? Diese bleibt vollkommen gleich. Was sich ändert, ist die Taktung.
Nur habe ich noch nicht verstanden, was Du eigentlich erreichen willst. Ich vermute eine Art Terminkalender. Und da verstehe ich nicht warum Du Tabelleneinträge "korrigieren" willst. Wenn Du einmal 12.34 als Startzeitpunkt eingegeben hast, dann kanns Du das doch nicht auf 13.00 bei 30Minuten-Taktung ändern, um dann bei 5Minuten-Taktung auf ???? zu ändern??

Was willst Du damit erreichen?

Gruß
K-H

@Jobo
Ich vermute es geht um die "Auflösung" der Darstellung.

NoGAD 24. Okt 2019 09:29

AW: Datenbankstruktur - wie speichern?
 
Danke für eure Antworten.

Ich habe mich unklar ausgedrückt.

Die Zeiten sind fest vorgegeben, die Intervalle auch. Jedoch können die im Programmsetup geändert werden.

So ist es vorstellbar, dass ein Anwender 2 Jahre lang die Daten im 15-Minuten-Rhythmus einträgt und auf einmal auf einen 10 minütigen Takt umstellt. Dadurch wäre der Vorlauf der Termine inkonsistent und es würden viele aus der Ansicht verschwinden, wären aber in der DB noch enthalten.

Hierzu suche ich eine Lösung der Speicherung, damit die Einträge in der DB skalierbar sind.

(OT: wie funktioniert die BBCode-Tabelle?)

jobo 24. Okt 2019 09:44

AW: Datenbankstruktur - wie speichern?
 
Also viel klarer ist es jetzt nicht.
Wie stellst Du Dir denn die Änderung der alten Intervalle vor?
Du weißt doch gar nicht, wie ein alter Eintrag in das neue Intervall gehört.

Wie gesagt, Du musst ein Update auf alle alten Einträge ausführen. Für mich ist das keine Strukturänderung der Daten.

(OT BBCode googlen oder einen Beitrag mit bestehender Tabelle zitieren, da kannst Du es ablesen- wahrscheinlich hast Du nur irgendwo einen / vergessen oder sowas)

Jumpy 24. Okt 2019 09:51

AW: Datenbankstruktur - wie speichern?
 
Du speicherst doch bestimmt die Gültigkeitszeiträume der Intervallinformation, oder?
So kannst du dann dafür sorgen das ältere Daten mit dem seinerzeit geltenden Intervall angezeigt werden, und neue mit dem neuen Intervall.

p80286 24. Okt 2019 10:08

AW: Datenbankstruktur - wie speichern?
 
Wenn ich das richtig verstanden habe, geht es nur um die Darstellung.
Für die Erfassung wird die aktuelle Taktung übernommen und der Termin entsprechend gespeichert.
Für die Wiedergabe nuß dann der Termin "gerundet" werden, um in das erwünschte Zeitraster zu passen.

Gruß
K-H

NoGAD 24. Okt 2019 10:32

AW: Datenbankstruktur - wie speichern?
 
Zitat:

Zitat von Jumpy (Beitrag 1450179)
Du speicherst doch bestimmt die Gültigkeitszeiträume der Intervallinformation, oder?
So kannst du dann dafür sorgen das ältere Daten mit dem seinerzeit geltenden Intervall angezeigt werden, und neue mit dem neuen Intervall.

Das erscheint mir eine gute Idee, daran hatte ich noch gar nicht gedacht. Ich mache mir dazu Gedanken. :-)

Zitat:

Zitat von p80286 (Beitrag 1450181)
Wenn ich das richtig verstanden habe, geht es nur um die Darstellung.
Für die Erfassung wird die aktuelle Taktung übernommen und der Termin entsprechend gespeichert.
Für die Wiedergabe nuß dann der Termin "gerundet" werden, um in das erwünschte Zeitraster zu passen.

Gruß
K-H

Ich meine, dass dies zu Fehlverhalten führen könnte. Danke dennoch für die Idee :-)

LG Mathias

p80286 24. Okt 2019 10:59

AW: Datenbankstruktur - wie speichern?
 
Welcher Art soll das Fehlverhalten sein?
Du änderst nur die Darstellung.
z.b.
Datensatz: 12.13 xxxx
Darstellung1: 12.00 Stunde/30Min
Darstellung2: 12.15 15Minuten/5Minuten
Darstellung3: 12.10 10Minuten
Darstellung4: 12.13 1Minute

Gruß
K-H

Andreas13 24. Okt 2019 11:24

AW: Datenbankstruktur - wie speichern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich weiß nicht, wie Du Deine Daten strukturiert hast, daher habe ich für Dich auf die Schnelle eine mir zweckmäßig erscheinende Struktur gebastelt und diese graphisch dargestellt.

Ich würde dazu gemäß Bild im Anhang 5 miteinander verknüpfte Tabellen führen. Damit hättest Du die gewünschte Flexibilität. Der Preis dafür ist allerdings ein komplizierter Datenzugriff.

Erklärung zum Bild:
===============
Die gelben Tabellen sind die Stammdaten (= „Detail“ oder „Kind“), die blauen Tabellen stellen die abhängigen Tabellen („Master“, oder „Mutter“) dar. Die roten Feldinhalte in den Master-Tabellen sind die Fremdlinks zu den jeweiligen Stammdaten.

Begriffserklärung:
=============
Kind = Detail = Stammdatenbank
Kind = hat EINE Mutter
Mutter hat ein Kind oder mehrere Kinder, d.h. der Master hat den/die Fremdschlüssel!
Mutter zeigt auf Kind = Master zeigt auf Detail

Das Löschen eines Datensatzes ist nur erlaubt, wenn KEIN Pfeil auf den Datensatz in der Tabelle zeigt!

Anmerkung: Manche Literaturstellen benutzen die Begriffe „Master“ und „Detail“ genau umgekehrt. Aber meine obige Darstellung paßt zur Pascal-Philosophie und zur Nomenklatur der zur Absolute-DB.

Vielleicht hilft es Dir weiter.

Gruß
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.
Seite 1 von 4  1 23     Letzte »    

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