Schlüsselverletzung tolerieren sinvoll?

Hallo,
ich habe einen foreign key auf das Feld Kundennummer einer Tabelle, in die Datensätze einzufügen sind. Die einzufügende Kundennummer + sonstige Daten, muss also auch in einer Master-Tabelle vorhanden sein.

Da so ca. 10.000 bis 15.000 Datensätze aus einer Textdatei in die Tabelle eingefügt werden, muss ich jedes mal vorher ein Select auf die Kundennummer in der Master-Tabelle vornehmen.

Darüber bin ich irgendwie nicht richtig glücklich.
Wäre es möglich, das Insert-Statement ohne vorheriges Select durchzuführen und den Fehler vom Datenbanksystem auf die Schlüsselverletzung des foreign key zu ignorieren oder ist das noch unglücklicher bzw. genauso zeitraubend, als wenn ich jedesmal ein Select durchführe?
Viell. hat ja jemand auch eine clevere Idee?

Vielen Dank
Gruß Jan

Wäre es möglich, das Insert-Statement ohne vorheriges Select
durchzuführen und den Fehler vom Datenbanksystem auf die
Schlüsselverletzung des foreign key zu ignorieren oder ist das
noch unglücklicher bzw. genauso zeitraubend, als wenn ich
jedesmal ein Select durchführe?

Hi,
wenn du die Daten die keinen Master eintragen nichtweiter haben willst, würde ich mich genau darauf verlassen, dass der FK mir die Dinger um die Ohren haut.

Performance mäßig ist das standardmäßig schneller, da die DB die Prüfung eh durchführt, egal ob du dass vorher schon gemacht hast oder nicht.

Man kann sich dann allenfalls noch überlegen, ob man die ‚kaputten‘ Daten noch seperat wegschreiben will, oder dafür automatisch master einträge anlegen will.

In letzterem Fall würde ich prüfen ob deine DB deferred Constraints unterstützt.

Jens

Hallo,

du kannst die Daten erst mal in eine Hilfstabelle schreiben und dann die guten in die richtige Tabelle übertragen.

INSERT INTO richtigetab (SELECT * FROM hilfstab WHERE key IN (SELECT key FROM refzieltab))

…und schon sind alle Daten drin.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]