AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fehlerhaften ForeinKey finden
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlerhaften ForeinKey finden

Ein Thema von Perlsau · begonnen am 29. Aug 2015 · letzter Beitrag vom 31. Aug 2015
Antwort Antwort
Benutzerbild von p80286
p80286

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

AW: Fehlerhaften ForeinKey finden

  Alt 30. Aug 2015, 09:37
Die "not in" Lösung stoßt aber eher an die Grenzen der DB (Begrenzung der Menge), darum wäre die Lösung von Uwe zu bevorzugen.

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

n/a Beiträge
 
#2

AW: Fehlerhaften ForeinKey finden

  Alt 30. Aug 2015, 10:08
Die "not in" Lösung stoßt aber eher an die Grenzen der DB (Begrenzung der Menge), darum wäre die Lösung von Uwe zu bevorzugen.
Versteh ich jetzt nicht: welche Grenzen? Ich hab da ungefähr 2500 Datensätze in der Adresstabelle und ca. 1400 in der Orttabelle. Erstere wird allerhöchstens 50.000 Datensätze haben (mehr gibt's in dieser Branche nicht in DE), letztere vielleicht ... keine Ahnung, aber keine 20.000 schätze ich mal ... Schließlich hab ich das bis jetzt nur einmal benötigt, um in IbExpert im SQL-Editor den fehlerhaften Record zu finden. Das ging so schnell, ich hatte kaum Zeit zum Blinzeln
Also warum sollte ich mir da jetzt tiefere und noch weiter tiefergehende Gedanken machen müssen
  Mit Zitat antworten Zitat
jobo

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

AW: Fehlerhaften ForeinKey finden

  Alt 30. Aug 2015, 11:38
Die "not in" Lösung stoßt aber eher an die Grenzen der DB (Begrenzung der Menge), darum wäre die Lösung von Uwe zu bevorzugen.
Versteh ich jetzt nicht: welche Grenzen?
Versteh es einfach als freundlichen Hinweis bzw. Warnung. Wie Deine konkrete Datensituation in Zahlen aussieht, kann ja niemand vorher wissen. Die Grenzen sind wie immer DB und Versionsabhängig.
Auf die Schnelle hab ich zu Firebird nichts konkretes außer diesem Post gefunden:
https://groups.yahoo.com/neo/groups/...s/topics/95414

Dabei ist nicht klar, ob die Limitierung nur für explizite Aufzählung oder auch für dynamische Selectrückgaben erfolgt.

Meine Verständnis ist:
(not) in .. für kleineren Abgleich (also adhoc, kleine Komfortabfragen)
table join .. für unlimitierten Massenabgleich (also für den Rest)

Wenn Du es genau für Deine Version wissen willst, musst Du wohl selbst danach suchen oder es ausprobieren.
Gruß, Jo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.882 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Fehlerhaften ForeinKey finden

  Alt 30. Aug 2015, 12:12
Da rächt sich die Ansicht, dass man man aus Zeit-/Kostengründen beim Datenbankdesign auf die Deklaration der Constraints VWzüchten kann, da man diese ja im Programm berücksichtigt.
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

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

AW: Fehlerhaften ForeinKey finden

  Alt 30. Aug 2015, 12:21
Bitte nicht mit Handy von Unterwegs auf der Autobahn posten, schon gar nicht, wenn es ein VW ist. Da geht nicht nur die Worterkennung schnell mal schief.


Da rächt sich die Ansicht..
Naja, das wäre eigentlich die Hauptbotschaft des Threads, der sich originär um die Beseitigung der Folgen dreht!
Gruß, Jo
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Fehlerhaften ForeinKey finden

  Alt 30. Aug 2015, 14:23
Da rächt sich die Ansicht, dass man man aus Zeit-/Kostengründen beim Datenbankdesign auf die Deklaration der Constraints VWzüchten kann, da man diese ja im Programm berücksichtigt.
Oh, da bist du aber leicht im Irrtum: Selbstverständlich existiert ein eindeutiger Index Ortname-PLZ, so daß dieselbe Variante nicht doppelt vorkommen kann. Die Daten stammen allerdings aus einer Liste, die durch Selbstauskunft von Mitgliedern einer bestimmten Branche entstand – daher diese verschiedenen Schreibweisen für die Orte: Die meisten schreiben zwar ihre PLZ richtig, hängen dann aber ihren Ortsteilbezeichner noch hintendran oder verwenden nur den Ortsteil, z.B. 76227 Durlach oder 76227 Karlsruhe-Durlach oder 76227 Karlsruhe/Durlach statt einfach 76227 Karlsruhe. Ähnliches haben wir hier bei den Telefon-, Fax- und Handynummern. Hier halte ich mich an eine Vorwahlenliste, mit deren Hilfe ich die Vorwahlen abtrenne und mit der Vorwahl, die der PLZ zugeordnet ist, vergleiche. Records, die hier Diskrepanzen aufweisen, werden markiert und müssen später einzeln verifiziert werden (Branchenbuch, Gelbe Seiten etc.).

Ist also nicht immer nur die schon fast sprichwörtliche Dummheit oder Unerfahrenheit des Programmierers, die zu Datenbankfehlern führen kann ...
Angehängte Grafiken
Dateityp: jpg Orte_Index.jpg (16,7 KB, 20x aufgerufen)

Geändert von Perlsau (30. Aug 2015 um 14:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
798 Beiträge
 
#7

AW: Fehlerhaften ForeinKey finden

  Alt 30. Aug 2015, 15:21
Da rächt sich die Ansicht, dass man man aus Zeit-/Kostengründen beim Datenbankdesign auf die Deklaration der Constraints VWzüchten kann, da man diese ja im Programm berücksichtigt.
Oh, da bist du aber leicht im Irrtum: Selbstverständlich existiert ein eindeutiger Index Ortname-PLZ, so daß dieselbe Variante nicht doppelt vorkommen kann.
Da war wohl was anderes gemeint: Du kannst in der Datenbank den Foreign Key / Constraint so hinterlegen, dass die DB es nicht zugelassen hätte, einen Ort zu Löschen, solange dieser noch in einem Adress-Datensatz verwendet wird. Der "fehlerhafte Datensatz" wäre dir also schon beim Lösch-Versuch der "überflüssigen" Orte aufgefallen und nicht erst später. Es wäre also nie zu einer Inkonsistenz gekommen.

Als weiterer Hinweis: Ist die ORT_ID in der Tabelle Adressen als "NOT NULL" (also als Pflichtfeld) deklariert? Falls nicht, solltest du einen "left outer join" (ähnlich wie in #3) in deine View einbauen, damit dort auch Adressen auftauchen, für die kein Ort angegeben wurde.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Fehlerhaften ForeinKey finden

  Alt 30. Aug 2015, 15:37
Ach, jetzt versteh ich: Klar, die Ort-Id in der Adresstabelle als ForeignKey zu kennzeichnen ist sinnvoll. Hab das soeben nachgeholt:
Code:
alter table ADRESSEN
add constraint FK_ADRESSEN_ORTE
foreign key (ORT) references ORTE(ID_ORTE)
using desc index IX_ADRESSEN_ORTE
Als weiterer Hinweis: Ist die ORT_ID in der Tabelle Adressen als "NOT NULL" (also als Pflichtfeld) deklariert?
Selbstverständlich: PK ist bei mir in der Regel immer NOT NULL, weil ich den mit dem AutoInc-Tool von IbExpert erstelle; der macht das automatisch.
  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 15:28 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