Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Lücken in Zahlenfolgen erkennen? (https://www.delphipraxis.net/210519-luecken-zahlenfolgen-erkennen.html)

NoGAD 5. Mai 2022 22:05

Datenbank: ABSDatabase • Version: 7.93 • Zugriff über: ABSQuery

Lücken in Zahlenfolgen erkennen?
 
Hallo,

ich verzweifle gerade an einer wahrscheinlich einfachen Lösung für die Erkennung von Lücken in Zahlenfolgen in einer Datenbank.

Wenn ich aus einer Tabelle Einträge lösche, werden vergebene Kundennummern frei. Ohne nun sämtliche Einträge zu durchlaufen - gibt es eine Möglichkeit diese Lücken zu erkennen, um die Kundennummer neu zu vergeben?

LG Mathias

blawen 5. Mai 2022 22:44

AW: Lücken in Zahlenfolgen erkennen?
 
Normalerweise werden Datensätze in der Datenbank nicht gelöscht, sondern als gelöscht markiert.
Ebenso sollte die Kundennummer nicht "mehrfach" vergeben werden können - schliesslich wird diese doch mit irgendwelchen Buchungen oder sonstigen Datensätzen verknüpft sein.

Jasocul 6. Mai 2022 06:10

AW: Lücken in Zahlenfolgen erkennen?
 
@blawen:
Nach Ablauf der gesetzlichen Aufbewahrungszeiten darf man das löschen. In manchen Fällen muss man das sogar danach löschen (siehe DSGVO).

@NoGAD:
Mir ist keine Möglichkeit bekannt, solche Lücken direkt zu finden, außer spezielle Funktionen der Datenbank, um gelöschte Datensätze zu selektieren. Wie blawen schon richtig schrieb, werden die in der Regel nicht wirklich gelöscht. Aber soweit ich weiß manche Datenbanken überschreiben diese Bereiche wieder. Somit ist das auch kein sicherer Weg, alle Lücken zu finden.
Wenn du wirklich so etwas benötigst, solltest du einen Trigger auf der DB nutzen, der im Falle einer Löschung die wieder nutzbare Kundennummer in einer Tabelle speichert. Die erneute Nutzung erfordert dann aber auch eine Löschung dieser Nummer aus dieser Tabelle.

jaenicke 6. Mai 2022 06:41

AW: Lücken in Zahlenfolgen erkennen?
 
Du könntest die gelöschten Datensätze nicht wirklich löschen, sondern nur bis auf die Kundennummer leeren und als gelöscht markieren. Dann kannst du ganz einfach die niedrigste dieser so markierten freien Kundennummern ermitteln und wiederverwenden, wenn du einen neuen Kunden anlegst.

Jumpy 6. Mai 2022 08:32

AW: Lücken in Zahlenfolgen erkennen?
 
Auch wenn alles, was meine Vorredner geraten haben stimmt, kann man zur eigentlichen Fragestellung folgendes SQL versuchen:

SQL-Code:
Select Min(T.Kundennummer)+1 as LeereNummer From Tabelle T
Where (Select Kundennummer From Tabelle Where Kundennummer=T.Kundennummer+1) IS NULL
SQL-Code:
Select Min(T.Kundennummer)+1 as LeereNummer From Tabelle T
Where Not Exists (Select Kundennummer From Tabelle Where Kundennummer=T.Kundennummer+1)
SQL-Code:
Select Min(T.Kundennummer)+1 as LeereNummer From Tabelle T
Left Join Tabelle T2 on Kundennummer=T.Kundennummer+1
Where T2.Kundennummer is Null

himitsu 6. Mai 2022 10:44

AW: Lücken in Zahlenfolgen erkennen?
 
Wenn man die Datensätze sortiert, dann lässt sich leicht prüfen, ob vorheriger/nachfolgender Datensatz mehr als 1 entfernt ist.


Alternativ Min und Max nehmen, damit eine Serie (quasi Temptable mit allen möglichen Werten) generieren und dann mit den eigentlichen Datensätzen ein Outer-Join, bzw. der Left-Loin mit IsNull, wo alles drin ist, was in den eigentlichen Datensätzen nicht vorhanden ist (quasi ie Lücken).

Stevie 6. Mai 2022 11:50

AW: Lücken in Zahlenfolgen erkennen?
 
Ich persönlich würde ja einmal benutzte Kundennummern nicht wieder vergeben. Ist der Nummernkreis so klein, dass das notwendig ist?

Rollo62 6. Mai 2022 12:20

AW: Lücken in Zahlenfolgen erkennen?
 
Zitat:

Zitat von Stevie (Beitrag 1505519)
Ich persönlich würde ja einmal benutzte Kundennummern nicht wieder vergeben. Ist der Nummernkreis so klein, dass das notwendig ist?

Exakt.
Stell Dir vor ein alter Kunde ruft bei der Hotline an und gibt die alte Kundennummer an.
Wer weiss was da heutzutage für (Regress- und Datenschutz-)Probleme bei Euch daraus entstehen können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 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