AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

Ein Thema von Klaus01 · begonnen am 7. Jan 2014 · letzter Beitrag vom 8. Jan 2014
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.655 Beiträge
 
Delphi 10.4 Sydney
 
#1

Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 7. Jan 2014, 16:28
Datenbank: PostgreSQL • Version: 8.0 • Zugriff über: UniDac
Hallo,

in einer Tabelle habe ich mehrere Geräte eingetragen.

Diese Geräte sollen Wochentags (Mo - Fr) zu einem bestimmten Zeitpunkt (5 Minuten Raster) ein- und ausgeschaltet werden.

z.B. Mo-Fr: Einschalten: 08:00 Ausschalten: 17:30

Während des Wochenendes sollen die Geräte zu anderen Zeitpunkten geschaltet werden - oder komplett ausgeschaltet bleiben.

Wie würdet Ihr das Datenbankdesign anlegen?

Der Gerätetabelle noch zusätzliche Spalten spendieren
z.B:
Wochetags_einschalten
Wochetags_ausschalten
Wochenende_einschalten
Wochenende_ausschalten

Oder eine seperate Tabelle mit den Zeitdaten und Verweis auf die GeräteID?

Oder gibt es noch einen anderen Ansatz?

Ich stehe etwas ratlos da.


Grüße
Klaus
Klaus

Geändert von Klaus01 ( 7. Jan 2014 um 20:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.932 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Datenbankdesign: wiederkehrende Ereignis

  Alt 7. Jan 2014, 16:35
Moin...
definitiv:
Zitat:
Oder eine seperate Tabelle mit den Zeitdaten und Verweis auf die GeräteID?
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 17:20
Um das Ganze relativ flexibel zu machen, könnte die zusätzliche Tabelle so aussehen:
Zwei Zeitstempel geben dann jeweils einen Zeitpunkt relativ zu 0:00 des Tages an (von .. bis). Jedes Gerät, für das es einen Tabelleneintrag gibt, der den aktuellen Zeitpunkt einschließt, wird zu dieser Zeit aktiviert. Zusätzlich hast du eine Maske*, welche bestimmt, für welche Tage die Regel bestimmt ist.
Das entscheidende Detail bei diesem Ansatz ist: Jedes Gerät kann mehrere Regeln besitzen, die an unterschiedlichen Tagen das Gerät anschalten.

* z.B. ein Bitfeld oder einzelne boolesche Spalten; entweder für Werktags/Wochenende oder Mo..So.
Mich würde es nicht wundern, wenn irgendwann kurzfristig der Bedarf besteht, einzelne Wochentage voneinander zu unterscheiden. In der Datenbank und der Logik könnte man das schon anlegen.

Geändert von BUG ( 7. Jan 2014 um 17:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 17:47
Ich würde es so machen:
  • ID
  • Gerät_ID
  • AktionsTyp (an/aus)
  • AktionsZeitpunkt

Da bist Du ganz frei in der Definition der Zeitspanne. Für Ein/Aus brauchst Du zwar 2 Datensätze aber Ein und Ausschalten sind ja auch zwei Aktionen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.872 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 17:59
Handelt es sich jetzt hierbei eigentlich um Regeln oder ganz strikt von extern immer wieder neu vorgegebene Ereignisse?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 18:45
Der Versuch eines Ansatzes:
Code:
Gerätetabelle
GeräteID,Name,Bezeichning,...
1,Staubsauger,

WochenTagTabelle
ID,Tag
1,Montag,
2,Dienstag,
...
7,Sonntag


UhrzeitTabelle
ID,WochenPlanID,Uhrzeit
10,1,10:00
...
20,2,15:00
...
30,3,17:00
...
40,4,09:00
...
50,4,08:00
...
60,5,15:00
...
70,6,12:00
...
80,1,11:00
...
90,1,17:15
...


TerminTabelle
ID,GeräteID,WochenTagID,UhrzeitID
1,1,1,10
2,1,2,20
...
9,1,6,70

Staubsauger startet demnach
Montag  10:00
Dienstag 15:00
Samstag 17:15


oder

TerminTabelle
ID,GeräteID,WochenTagID
1,1,1
2,1,2
...
9,1,6


Staubsauger startet zu allen Uhrzeiten, die sich zum Wochentag der Wochentagtabelle
in der Tremintabelle finden lassen.
Sofern (technisch) erforderlich (wie von p80286 angeregt) auch einen Ausschaltzeitpunkt oder eine Dauer für den Betrieb in Minuten, Sekunden... ab der Uhrzeit.
Code:
UhrzeitTabelle
ID,WochenPlanID,Uhrzeit,Dauer
10,1,10:00,00:05:00
...
20,2,15:00,00:15:00
...
90,1,17:15,00:00:05
...
oder
Code:
UhrzeitTabelle
ID,WochenPlanID,Uhrzeit,Typ (1 = ein, 0 = aus)
10,1,10:00,1
11,1,10:05,0
...
20,2,15:00,1
21,2,15:15,0
...
90,1,17:15,1
91,1,18:00,0
...
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 18:53
Für Ein/Aus brauchst Du zwar 2 Datensätze aber Ein und Ausschalten sind ja auch zwei Aktionen.
Das ist auch eine Frage der gewünschten Abstraktionsebene. Ich finde es sinnvoll, die Planung/Regeln in der Datenbank zu speichern und bei Bedarf (oder regelmäßig) eine Ereignisfolge zu generieren, die dann abgearbeitet wird. Wenn man nur eine Ereignisfolge hat, könnte es (bei komplexeren Problemen) dann schwer werden, daraus die Überlegung/Planung zu rekonstruieren, die dazu geführt hat (z.B. um Fehler zu finden oder Pläne zu ändern).

Geändert von BUG ( 7. Jan 2014 um 18:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 19:18
Das sollte eigentlich reichen. Die Wochentage als ID-Tabelle ist überflüssig
Geräte
IDName
1Gerät 1
2Gerät 2
Wochenplan
IDGerät_IDTagUhrzeitOnOffVonBis
11107:00On  
21108:00Off 31.12.2013
31109:00Off01.01.2014 
41212:00On  
51215:00Off  
Terminplan
IDGerät_IDDatumUhrzeitOnOff
1101.01.201407:00On
2103.01.201408:00Off
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 20:04
Die Wochentage als ID-Tabelle ist überflüssig
und worher weißt Du, was für ein Wochentag 1 ist?
Sonntag oder Montag?

Bin es halt seit Jahrzehnten gewohnt für jeden Schlüsselwert (wie es hier der Tag ist) gibt es eine Tabelle, in der man die Bedeutung des Schlüsselwertes nachlesen kann.
Sicher kann man technisch gesehen hier auf diese Tabelle verzichten, ebenso, wie man technisch beim Gerät auf den Namen verzichten könnte. Der Informationsgehalt eines Steuersystemes wird hierdurch aber doch sehr eingeschränkt.
Wenn man mehrere Geräte mit gleichem Typ und oder Name... hat, so könnte man hier anstelle der Namen beim Gerät auch einen Fremdschlüssel auf eine Tabelle verwenden, in der alle Gerätetypen mit ihren Detaildaten enthalten sind.
Die Frage ist halt, wie weit man es mit der Normalisierung der Daten treibt.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.655 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 20:37
Handelt es sich jetzt hierbei eigentlich um Regeln oder ganz strikt von extern immer wieder neu vorgegebene Ereignisse?
.. gut, da ist die Überschrift etwas daneben, richtiger sind es immer wiederkehrende Aktionen.
Die Zeitstempel werden vom Benutzer konfiguriert (per GUI) und in die Datenbank geschrieben.
Ein Service liest die Daten aus der Tabelle und führt dann die Schaltaktion aus.


Zitat von BUG:
Um das Ganze relativ flexibel zu machen, könnte die zusätzliche Tabelle so aussehen:
Zwei Zeitstempel geben dann jeweils einen Zeitpunkt relativ zu 0:00 des Tages an (von .. bis). Jedes Gerät, für das es einen Tabelleneintrag gibt, der den aktuellen Zeitpunkt einschließt, wird zu dieser Zeit aktiviert. Zusätzlich hast du eine Maske*, welche bestimmt, für welche Tage die Regel bestimmt ist.
Das entscheidende Detail bei diesem Ansatz ist: Jedes Gerät kann mehrere Regeln besitzen, die an unterschiedlichen Tagen das Gerät anschalten.
Werde ich drüber nachdenken.

Derzeit habe ich nur zwei Wochenteile (Wochentags und Wochenende).
Wenn ich das flexibel halten soll (was ja erstmal nicht schlecht ist) könnten
bei der Erstellung der Datensätze des Wochentags - Tageseinträge von 1 bis 5 erstellt werden.


@Sir Rufo
auf einen Wocheplan (mit Datum) und Terminplan wollte ich eigentlich nicht hinaus.

Es würde dann auf eine Tabelle hinauslaufen wie von p80286 vorgeschlagen.
Auch die von nahpets geht in diese Richtung.

Danke für die rege Beteiligung.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf