Umstellung der Datenbankstruktur von DATETIME auf DATE und TIME(0) ab der Version 2.03.001

Martin Richter [Grutzeck Software GmbH]
26.04.2021 15:03

Beschreibung:

Bis zur AG-VIP SQL Version 2.03.001 wurden Datum, Zeit und Datum/Zeit Felder im Datentyp DATETIME gespeichert.

Dieser Datentyp speichert immer ein Datum in Verbindung einer Uhrzeit. Dies hat historische Gründe weil zur Zeit der ersten Entwicklung von AG-VIP SQL keine anderen Datentypen von den SQL Server Versionen unterstützt wurden und eine hohe Flexibilität von AG-VIP SQL erwartet wurde.

  • Bei einem Datum/Zeit Feld wurde sowohl der Datumsteil als auch der Zeitanteil eines DATETIME Feldes benutzt. (Beispiel: AngelegtDatum)
  • Bei einem Datumsfeld wurde der Zeitanteil immer auf 00:00Uhr gesetzt. Bei SQL Abfragen in AG-VIP SQL wurde jedweder Zeitanteil ignoriert.
  • Bei einem Zeitfeld wurde der Datumwert fest auf  den 30.12.1899 gesetzt. Nur der Zeitwert zwischen 00:00 und 23:59 wurde geprüft. 

Alle nun unterstützten SQL Server können stellen nun auch andere Datentypen zur Verfügung um Datum und Zeit Felder abzulegen.

Problem:

Das Problem war, dass man mit SQL Befehlen auch "ungültige" oder nicht der Regel entsprechende Daten in die Tabellen eintragen konnte. Gleichfalls lieferten SQL Abfragen nicht unbedingt die gewünschten Ergebnisse, ohne dass man die Ausgabe entsprechend formatiert.

Zudem nehmen diese Datentypen immer 8 Bytes in der Datenbank je Spalte in Anspruch. Obwohl ein Großteil der Daten gar nicht benötigt wurde.

Lösung:

Mit der Version 2.03.001 werden nun die Datum und Zeit Felder in passenden Datentypen gespeichert. Die neuen Datentypen nehmen weniger Platz in der Datenbank weg. Abfragen im SQL Server liefern passende Ergebnisse ohne das man bestimmte Informationen ignorieren muss.

  • Datum/Zeit Felder werden wie bisher in DATETIME Spalten abgespeichert. Diese benötigen in der Datenbank 8 Bytes.
  • Felder vom Typ Datum werden nun in DATE Spalten gespeichert. Dieser Datentyp benötigt nur 3 Bytes.
  • Felder vom Typ Zeit werden nun in Spalten vom Typ TIME(0) abgespeichert. Dieser Datentyp benötigt auch nur 3 Bytes. Zeit Felder können auch Sekunden abspeichern, diese werden jedoch von AG-VIP SQL nicht berücksichtigt.

Wichtig DATETIME Spalten können sowohl in DATE als auch TIME(0) Spalten umgewandelt werden. DATE Spalten können in DATETIME Spalten umgewandelt werden. TIME(0) Spalten können weder in DATE noch in DATETIME Spalten umgewandelt werden.

Folgen:

Es ist möglich dass bestehende SQL Abfragen, die direkt in einem Hintergrundprozess oder einem Report benutzt werden bei Datum und Zeit Felder nun andere Ergbenisse liefern, oder dass deren Abfrage ungültig wird.
Die entsprechenden Abfragen müssen neu geschrieben werden.

Abfragen, die in AG-VIP-Makros mit der Query Methode gemacht werden oder gespeicherte Auswertungen sind davon nicht betroffen. Auch Abfragen, die mit Filtern im Reportmanager gemacht werden sind davon nicht betroffen.

Tags: Datenbank, Datenbankstruktur, SQL
Durchschnittliche Bewertung: 0 (0 Abstimmungen)

Kommentieren nicht möglich