AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ID bei neuem Datensatz automatisch hochzählen
Thema durchsuchen
Ansicht
Themen-Optionen

ID bei neuem Datensatz automatisch hochzählen

Ein Thema von Luca Haas · begonnen am 3. Nov 2017 · letzter Beitrag vom 6. Nov 2017
Antwort Antwort
jobo

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

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 20:47
Wofür möchtest Du die ID benutzen?
Also es geht um keinen Primärschlüssel, ich möchte damit quasi das n einer 1:n Beziehung darstellen.
Du kannst auch 1:n Beziehungen vollkommen ohne die von Dir genannten Kriterien "aufsteigend", "lückenfrei" usw. erstellen.
1:n sagt, zu einem bestimmten (genau bestimmbaren) Datensatz in einer Tabelle A, gibt es in einer anderen Tabelle B n Datensätze, die genau zu dem einen in Tabelle A gehören. Dies wird dadurch realisiert, dass die n Datensätze der Tabelle B in einer bestimmten Spalte den identischen Wert aus Tabelle A führen.

Es ist sozusagen State of the Art, diese Werte als ID/ Primärschlüssel und Fremdschlüssel zu bezeichnen.

Damit Entwickler und alle, die es wissen sollten, das leicht erkennen, gibt es zu diesen Begriffen auch analoge Sprachkonstrukte in SQL. Die ermöglichen die explizite Definition von Primary und Foreign Keys (Primär / Fremdschlüssel), was es wiederum dem Datenbanksystem erlaubt, diese Vorgaben zu überwachen und deren Einhaltung zu garantieren(!).

Alternativ kannst Du komplett ohne diese Begriffe und Definitionen und ihre Kenntnis arbeiten, nur durch die Anwendung von SQL Mengenoperationen. Damit verschenkst Du erhebliche Teile der Datenbankfunktionalität.

Oder noch mal andersrum:
Wenn Du selber fachlich keinen Bedarf an der Lückenlosigkeit der Zahlen hast, den hat auch niemand anders. Jedenfalls nicht die Datenbank und auch nicht eine 1:n Beziehung. Vergiss es einfach.
Gruß, Jo
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
548 Beiträge
 
Delphi 12 Athens
 
#2

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 4. Nov 2017, 08:02
Bei einigen unserer Kunden hat der beschriebene und auch nicht einfach zu vermeidende Umstand dass per Autoinc erzeugte Werte nicht unbedingt lückenlos sind, schon zu Misstrauen bei Betriebsprüfungen durch das Finanzamt geführt. Dabei ging es nicht um Rechnungsnummern, wo ich das noch verstehen könnte, sondern um Datensatz-IDs von Buchungen.

Die beste Lösung für dieses Problem ist einfach: Man macht diese Werte, die der Anwender ja eigentlich weder zu sehen noch zu bearbeiten hat einfach unsichtbar.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 4. Nov 2017, 09:09
Da die ID eine Verwaltungsinformation der DB ist, hat sie ausserhalb der selbigen keinen Informationswert. Es sei denn, Du möchtest die Eintragung von Daten in einer zeitlichen Abfolge betrachten (Debugging). Was auch nur möglich ist wenn die ID über autoinc generiert wird.
Wenn Du zb. 5 neue Datensätze generierst und diese per rollback verwirfst, hast Du schon eine Lücke von 5 Werten.
Auch wenn es schon gesagt wurde, die ID dient einzig der eindeutigen Identifizierung des Datensatzes. Welchen Wert sie hat, ist vollkommen unerheblich.

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

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
129 Beiträge
 
Delphi 12 Athens
 
#4

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 4. Nov 2017, 09:21
Ich bin immer wieder verwundert, wie viele Gedanken man sich über die IDs machen kann.

Selbstverständlich sind die IDs reine technische Schlüssel und dürfen keine Semantik haben! Sonst ist das DB-Design "defekt".

Insbesondere darf man die IDs nie als Rechnungsnummer oder Aktenzeichen oder soetwas ähnliches benutzen. Dazu muss man eine eigenes Feld verwenden!

Daraus ergibt sich, dass IDs immer über AutoInc-Mechanismen (Oder bei Firebird Trigger mit gen_id()-Aufruf) erstellt werden sollten.

Ich mache mir auch keine Gedanken mehr, ob eine Tabelle ein ID-Feld benötigt: Es schadet nicht, wenn jede Tabelle eines hat und es hilft in jedem Fall, wenn man exakt einen Datensatz ansprechen will, z.b. beim Bearbeiten.


Einzig valide Frage ist, wie kommt man - um z.B. eine Fremdschlüsselbeziehung zu einem neuen Datensatz anzulegen, an den letzten ID-Wert und das geht prinzipiell immer erst, wenn der Datensatz in der DB gespeichert ist.

Bei u.a. Firebird gibt es dazu das wunderbare RETURNING-Konstrukt um bei einem Insert gleich Werte (z.B. die des ID-Feldes) zurückzubekommen.

Für FireDAC gibt es die schöne Doku-Seite http://docwiki.embarcadero.com/RADSt...lder_(FireDAC), die dazu alles zusammenfasst.
Björn Reimer
  Mit Zitat antworten Zitat
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 6. Nov 2017, 07:57
Okay ich sehe grade, dass ich am Freitag ganz schön großen Mist geschrieben habe
Also ich haben 2 Tabellen, eine in der nur eine ID und eine "Aufgabe" steht, in der anderen Tabelle habe ich dann die jeweilige ID der Aufgabe, sowie alle Arbeitsschritte mit einer Position.
Diese Position hätte ich am liebsten durchgehend, mit der ID habe ich kein Problem

Falls jemand meinen Aufbau nicht verstanden hat, habe ich einen Screenshot angehangen
Angehängte Grafiken
Dateityp: png Ashampoo_Snap_2017.11.06_08h56m38s_001_Aufgabenmuster.png (37,8 KB, 8x aufgerufen)
  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 23:08 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