AGB  ·  Datenschutz  ·  Impressum  







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

Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

Ein Thema von Klaus01 · begonnen am 7. Jan 2014 · letzter Beitrag vom 8. Jan 2014
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 7. Jan 2014, 23:35
Die Wochentage als ID-Tabelle ist überflüssig
und worher weißt Du, was für ein Wochentag 1 ist?
Sonntag oder Montag?
Woher weiß mann, dass mit 17:00 auch 17:00 MEZ gemeint ist?
Und in Delphi selber wird die Uhrzeit als Extended gehalten, woher weiß man, dass damit überhaupt eine Uhrzeit gemeint ist?

Das sind alles Vereinbarungen, die man trifft. Zudem die Datenbank auch über das Programm gefüllt wird.

So kann auch vereinbart sein, dass der Wert binär zu interpretieren ist (pro Tag ein Bit)
auf einen Wocheplan (mit Datum) und Terminplan wollte ich eigentlich nicht hinaus.
Das Datum im Wochenplan ist nur dafür da einen gültigen Zeitraum zu definieren, aber den kann man auch weglassen.
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
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#12

AW: Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 8. Jan 2014, 01:55
@nahpets: Ich will dir nicht zu nahe treten, aber kennst du das Sptrichwort "Mit Kanonenkugeln auf Spatzen schießen".

Warum eine Wochentagstabelle? Wie Sir Rufo schon schrieb: Es muss vereinbart werden. Anonsten könnte man ja auch sagen, warum Deutsche Wochentage und nicht englische Bezeichnungen.

Warum eine Extra "UhrzeitTabelle" verwenden? Ist doch viel Besser, wenn die Zeit in die "TerminTabelle" statt einer ID geschrieben.

Wieviel Tabellen erzeugst du eigendlich, wenn es um komplexe Daten geht?


Das Beispiel von p80286 bring es "einfach" auf den Punkt.


Nur so meine Meinung.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#13

AW: Datenbankdesign: wiederkehrende Ereignisse

  Alt 8. Jan 2014, 08:11
Die Wochentage als ID-Tabelle ist überflüssig
und worher weißt Du, was für ein Wochentag 1 ist?
Sonntag oder Montag?
Das ergibt sich aus ISO 8601
Zitat:
...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.
Vorsicht. Nur weil da dann 'Sonntag' steht, ist noch lange nicht klar, das das ein Sonntag ist. Was Du machst, ist eine 'Lookuptabelle' oder 'Ausprägung' eines Wertes. Bei Dir wird die Zahl 7 als Text 'Sonntag' abgebildet. Du könntest da auch 'Apfel' eintragen.

In diesem speziellen Fall würde ich die Wochentagsbezeichnung aus der CultureInfo des Rechners auslesen, weil ich annehme, das diese auch im ISO-Format abgelegt sind. Damit hätte ich sofort eine lokalisierte Ausprägung. Ähnlich würde ich mit den Monaten verfahren.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 8. Jan 2014, 08:16
Guten Morgen,

@bernau/SIr Rufo:

Vereinbarungen sind schön und gut - aber warum sollte man denn beim Programmieren dann so was umständliches wie Enums und Konstanten verwenden? ein 1..3 für ja, nein, vielleicht reicht doch auch?

Es ist schlicht ne Frage wo Businesslogik abgelegt ist. Wenn die größtenteils in der DB steckt, z.b. weil man über ein ORM darauf zugreift und daher auch Enumdefinitionen in der DB braucht, dann hat man halt einige DB-Tabellen mehr. Insofern ist es eben nicht abwägig für die Wochentage eine Tabelle anzulegen - gerade auch um darüber Übersetzungen zu ermöglichen...
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#15

AW: Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 8. Jan 2014, 08:48
Guten Morgen,

@bernau/SIr Rufo:

Vereinbarungen sind schön und gut - aber warum sollte man denn beim Programmieren dann so was umständliches wie Enums und Konstanten verwenden? ein 1..3 für ja, nein, vielleicht reicht doch auch?

Es ist schlicht ne Frage wo Businesslogik abgelegt ist. Wenn die größtenteils in der DB steckt, z.b. weil man über ein ORM darauf zugreift und daher auch Enumdefinitionen in der DB braucht, dann hat man halt einige DB-Tabellen mehr. Insofern ist es eben nicht abwägig für die Wochentage eine Tabelle anzulegen - gerade auch um darüber Übersetzungen zu ermöglichen...
Wie Furtbichler schon sagte, es könnte statt Montag auch Apfel drin stehen oder Monday oder Lunes oder Trallala. Der Computer weis damit immer noch nicht, ob es ein Montag ist. Man muss es definieren. Somit wäre solch eine Tabelle nur für die Mehrsprachigkeit interessant.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#16

AW: Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 8. Jan 2014, 09:00
Komische Diskussion.
Viele der führenden Anbieter eines RDBMS bieten Datumsarithmetik inkl. Wochentag nach ISO. Ich kann also aus einem Wochentag "Montag" eine Nr. berechnen, eine ID erhalten, mögliche Datumse eingrenzen und umgekehrt aus jedem Datum einen Wochentag ableiten.
Mit einer Tabelle, in der Zeitstempel, Muster nach Wochentag abgelegt sind, habe ich also höchste Freiheitsgrade und die Möglichkeit, mein Programmverhalten dynamisch anzupassen bzw. mit anderen Systemen zu harmonisieren.
Alle diese Daten und Funktionen kann ich natürlich auch "für mich allein " in der Anwendung berechnen und verwalten. In einer heterogenen Programmwelt macht das aber nur bedingt Sinn und kostet mehr Entwicklungszeit.
Gruß, Jo
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#17

AW: Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 8. Jan 2014, 09:04
Was nahpetS da gemacht hat, nennt sich 3NF. Kann man so machen, muss man aber nicht. ("Spatzen fliegen auch weg, wenn man sich pazifistisch nähert")

Insofern ist es eben nicht abwägig für die Wochentage eine Tabelle anzulegen
Richtig. Aber damit ist die Semantik ja nicht geklärt. (PS: "abwegig")
Zitat:
- gerade auch um darüber Übersetzungen zu ermöglichen...
Kann, muss aber nicht. I.a. hat man hier mehrere Orte, wo Übersetzungsinformationen angelegt werden (was ja nicht gerade ein Vorteil ist). Die Lookup-Tabellen haben nur dann Sinn, wenn die Ausprägung in einer View/Query verwendet wird (Stichwort: Report). Es ist dann nämlich überflüssig, im Report die Ausprägungen vorzuhalten (was nebenbei manchmal echt lästig ist, vor allen Dingen, wenn es sich um einen externen Reportgenerator handelt).

Lookuptabellen sind u.a. sinnvoll, wenn man die Dateneingabe per Auswahl (Combo, Radio, etc.) ermöglichen will. Früher gab es ja die beliebten 'Kennziffern' (die gar keine 'Ziffern', sondern Ziffernfolgen waren), die die Datentypisten in ausgedruckter Form rund um den Bildschirm geklebt haben. Da war dann der Staubsauger '0125' und der Montag die '1'.

Viele der führenden Anbieter eines RDBMS bieten Datumsarithmetik inkl. Wochentag nach ISO.
Richtig, Aber: Vorsicht! Falle! 'SET DATEFIRST'

Allgemein gesehen dreht sich die Diskussion bzw. das Unverständnis von nahpetS' Ansatz um die Frage, ob man seine DB als 2.xNF oder 3NF ablegen sollte sowie enventuell einiger nicht geklärter Fragen, wozu man Lookuptabellen verwendet (Ausprägung vs. Semantik).

In der DB habe ich natürlich irgendwann eine Abfrage auf '1' (wenn z.B. jeden Montag eine Wartung durchgeführt wird oder sonstwas gemacht wird). Irgendwann muss ich mich im DB-Umfeld auf die Bedeutung der einzelnen Werte festlegen. Es wäre fatal, hier in der Lookuptabelle nachzuschlagen, ob da 'Montag' drinsteht.

aber warum sollte man denn beim Programmieren dann so was umständliches wie Enums und Konstanten verwenden?
Es erzeugt besser lesbaren Code:
Delphi-Quellcode:
If Day=1 Then
  StarteDieWartung;
// vs.
If Day=Monday Then
  StarteDieWartung;

Geändert von Furtbichler ( 8. Jan 2014 um 09:08 Uhr)
  Mit Zitat antworten Zitat
Klaus01
Online

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

AW: Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 8. Jan 2014, 10:22
Guten Morgen,

so schaut meine Tabelle jetzt aus.

Code:
CREATE TABLE "scheduledActionTable"
(
  "pkId" bigint NOT NULL,
  "deviceId" bigint NOT NULL,
  "time" time without time zone NOT NULL,
  action character(5)[],
  "daysOfWeek" bit(8)[],
  CONSTRAINT "scheduledActionTable_pkey" PRIMARY KEY ("pkId"),
  CONSTRAINT "scheduledActionTable_deviceId_fkey" FOREIGN KEY ("deviceId")
      REFERENCES "deviceTable" ("pkId") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
Die Wochentage sind in einem Byte codiert.
Die Wochentage hätten dann folgende Werte:
Code:
 
Montag :    1  [1000 0000]
Dienstag:   2
Mittwoch:   4
Donnerstag: 8
Freitag:   16
Samstag:   32 
Sonntag:   64  [0000 0010]
Ich denke das ist ein gangbarer Weg - oder übersehe ich da etwas entscheidendes?

Grüße
Klaus
Klaus

Geändert von Klaus01 ( 8. Jan 2014 um 10:42 Uhr) Grund: Wochentage umgestellt:
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#19

AW: Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 8. Jan 2014, 10:43
Wenn Deine Datenbank bit Arithmetik beherrscht oder Du den ganzen Kram im Client durchhechelst (Der kann ja bit Arithmetik), kann man damit wohl arbeiten.
Falls nicht und Du bspw. einen Report über die Schaltvorgänge der nächsten Stunden, Tage, Wochen liefern musst, sieht es vielleicht schon anders aus.
Gruß, Jo
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#20

AW: Datenbankdesign: wiederkehrende [Ereignisse] Aktionen

  Alt 8. Jan 2014, 10:53
Wie würde(st) man / du, dann das Programm bzw. den Dienst machen, der das Starten der Geräte übernimmt?

(Ich frage weil ich bald sowas ähnliches machen soll, allerdings etwas komplexer. Im Prinzip sollen die Zeiten wie im Taskmanager von Windows konfigurierbar sein, d.h. ich brauche im Datenmodell Felder wie Startzeit, Endzeit, Wiederholung alle X Minuten usw. Soll aber nicht das Thema meiner Frage sein, da ich dazu bestimmt in Kürze einen eigenen Thread starten werden)

Mir geht es darum, was mach der Dienst? Kreiert der sich aus der o.g. Tabelle dann einmal am Tag eine Aufgabenliste ggf. in einer Temp-Tabelle ala "was muss ich heute machen"? Und guckt dann jede Minute, ob er in der Minute was starten soll?

Oder "guckt" er in jeder Minute in der ursprünglichen Konfigurationstabelle, ob was zu starten ist?
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 14:28 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