AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FB: Unique Index auf Datum und Uhrzeit
Thema durchsuchen
Ansicht
Themen-Optionen

FB: Unique Index auf Datum und Uhrzeit

Ein Thema von hoika · begonnen am 31. Jan 2018 · letzter Beitrag vom 3. Feb 2018
Antwort Antwort
jobo

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

AW: FB: Unique Index auf Datum und Uhrzeit

  Alt 1. Feb 2018, 13:34
Hallo,
Einspruch Eurer Ehren
Einspruch abgelehnt!

es ging mir erstmal um klare Begriffe. Index versus Constraint, ...
Die Technik: Moderne Datenbanken bieten normalerweise alle (Halb)Automatiken, die einen Index anlegen, sobald ein (Primary)Key-Constraint definiert wird und dann auch umgekehrt, wenn ein Constraint gelöscht wird, wird der Index gelöscht usw usf. Der Index eine ist eine Hilfsdatenstruktur zur Beschleunigung von Abfragen**, der Constraint eine logische Regel.
Darüber hinaus kann man natürlich Indizes selbst definieren (ohne Zusammenhang mit einem Schlüsselkonstraint)

Du möchtest einen Primary Key Constraint über mehrere Felder inkl Date, Time Spalte.
Das soll Eindeutigkeit garantieren, dazu sind diese Konstrukte da, kein Thema. Wird auch funktionieren.
Date / Time haben den "kleinen Randeffekt" mit der Genauigkeit, die musst/kannst Du nach Bedarf justieren (durch Beschneiden der Werte).

Die Problematik mit der Wirksamkeit eines Index zur Beschleunigung hat damit nur am Rande etwas zu tun. Eben bei einer Abfrage, niemals bei einem Insert*.
Wirken tut und wirken soll beim Insert dagegen die Eindeutigkeitsregel, der Primary Key Constraint. Die Überprüfung eines neue Wertes oder Wertegruppe wird beschleunigt durch einen ebenfalls existierenden-weil meist automatisch angelegten- Unique Index, der die vom Server automatisch durchgeführte Suche nach einem bereits vorhandenen, identischen Wert beschleunigt. Auch hier stören keine Casts oder was auch immer.

*die negative Beschleunigung eines zu aktualisierenden Index bei Insert mal außen vor gelassen
** indirekt werden so auch Inserts beschleunigt- durch beschleunigte Abfragen auf Duplikate

Meinetwegen können noch weitere Zeugenaussagen gemacht werden. Ich vertage mich.
Gruß, Jo
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: FB: Unique Index auf Datum und Uhrzeit

  Alt 1. Feb 2018, 16:24
Hallo,
Waffenstillstand

Aber schön geschrieben und stimmt sogar.

Setzen: 1+
Heiko
  Mit Zitat antworten Zitat
jobo

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

AW: FB: Unique Index auf Datum und Uhrzeit

  Alt 2. Feb 2018, 04:59
Es waren Waffen im Spiel?
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: FB: Unique Index auf Datum und Uhrzeit

  Alt 2. Feb 2018, 07:30
Hätten sein können!
Als Hoika schrieb Insert fiel mir eine Passage in irgendeinem Datenbankhandbuch ein "Wenn Du einen Unique Index nutzt und eine Doublette eingefügt wird, gibt es eine Fehlermeldung" und jetzt kann man fröhlich darüber streiten ob ein Unique Index das richtige ist um Doubletten zu vermeiden.....

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#5

AW: FB: Unique Index auf Datum und Uhrzeit

  Alt 2. Feb 2018, 09:16
Hätten sein können!
Als Hoika schrieb Insert fiel mir eine Passage in irgendeinem Datenbankhandbuch ein "Wenn Du einen Unique Index nutzt und eine Doublette eingefügt wird, gibt es eine Fehlermeldung" und jetzt kann man fröhlich darüber streiten ob ein Unique Index das richtige ist um Doubletten zu vermeiden.....

Gruß
K-H
Ich möchte mich nicht streiten, auch nicht fröhlich aber,
das Einfügen von Doubletten sollte bereits vorher vermieden werden.
Mit dem unique constraint wird jedoch die Integrität der Datenbank sichergestellt,
damit es mit Sicherheit keine Doubletten gibt.
Alexander
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: FB: Unique Index auf Datum und Uhrzeit

  Alt 2. Feb 2018, 10:28
Hallo,
Zitat:
Unique Index das richtige ist um Doubletten
Wie weiter oben schon schön erklärt wurde, ist es nicht Index, sondern das Unique Constraint,
was die Doubletten verhindert, und somit die Integrität der Datenbank sichert.
Der Unique Index wird von Firebird zusätzlich angelegt, um schneller nach einem eventuell vorhandenen Wert zu suchen.

Wie soll ich denn sonst verhindern, dass Doubletten in die Datenbank kommen.
Soll etwas ausschließlich das Programm das prüfen?
Was ist, wenn quasi gleichzeitig 2 gleiche Einträge angelegt werden,
oder es einen Bug im Programm gibt?

Als letzte Instanz muss ich der DB sagen können, dass ich da keine Doubletten gibt.
Heiko
  Mit Zitat antworten Zitat
jobo

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

AW: FB: Unique Index auf Datum und Uhrzeit

  Alt 2. Feb 2018, 13:07
ist es nicht Index, sondern das Unique Constraint,
was die Doubletten verhindert, und somit die Integrität der Datenbank sichert.
Der Unique Index wird von Firebird zusätzlich angelegt, um schneller nach einem eventuell vorhandenen Wert zu suchen.

Wie soll ich denn sonst verhindern, dass Doubletten in die Datenbank kommen.
Soll etwas ausschließlich das Programm das prüfen?
Was ist, wenn quasi gleichzeitig 2 gleiche Einträge angelegt werden,
oder es einen Bug im Programm gibt?

Als letzte Instanz muss ich der DB sagen können, dass ich da keine Doubletten gibt.
Das sehe ich auch so. Der Unique constraint ist die letzte Instanz, die im Fehlerfall zuschlägt.
Konzeptionell kann man das natürlich ganz verschieden einsetzen.
Bspw. Zufallszahlen als ID eintragen und immer wenn es sie schon gibt, knallt es halt.
Oder es dem User überlassen, so lange eingeben, bis es nicht knallt.
Oder die gängige Variante, eine Sequenz. Knallt selten.
Oder UUID usw.

Vor dem Insert manuell auf Eindeutigkeit zu prüfen macht m.E. keinen Sinn. Das macht die DB mit dem Unique Constraint sowieso. Also doppelte Arbeit und die eine Hälfte vielleicht auch noch vergeblich, weil nach der manuellen Prüfung ja schon Zeit wäre, wo sich der Datenstand verändert. (außer..egal)

Also sinnvoll ist eine ID Quelle, die auf natürliche Weise Eindeutigkeit garantiert oder halt zu 99,xy %. Und da schließt sich der Kreis, denn man könnte bspw. Datum / Uhrzeit nehmen. Soetwas muss natürlich mit der Entstehungsfreuenz der Datensätze dann abgestimmt sein.


"Beschießt" man das System bewusst mit nicht eindeutigen Werten, kann man sich zwar auf den Constraint verlassen, aber verpulvert natürlich ohne Not sehr viel Ressourcen. Wer's mag..
Ich glaube nicht, dass das im Sinne eines Höhentrainings unter Sauerstoffmangel später zu einer Leistungssteigerung des Systems führt, wenn es wieder normal genutzt wird. Training ist für KI Systeme, nicht für Fehlerbehandlungsroutinen.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz