Referentielle Integrität mittels SQL Statement überprüfen?

hendrik

Neuer Benutzer
Beiträge
4
Hallo zusammen,

ich habe eine SEHR theoretische Frage, die aus einer alten Datenbank Klausur stammt, an der ich gerade tüftele. :confused:
Die Frage lautet, wie sich mit einem SQL Befehl die Einhaltung der Referentiellen Integrität überprüfen lässt.

Über einen Gedankeansatz wäre ich sehr dankbar, zumal ich noch ein Datenbank Neuling bin. Zum überprüfen und testen habe ich den SQL Server 2005 . Die vollständige Angabe zu der Aufgabe anbei.

Vielen Dank,

Gruß

Hendrik
 

Anhänge

  • RI.JPG
    RI.JPG
    31,5 KB · Aufrufe: 7
Werbung:

Charly

Datenbank-Guru
Beiträge
306
AW: Referentielle Integrität mittels SQL Statement überprüfen?

Hallo hendrik,

ich gehe mal dvon aus das die Tabellen noch leer sind.

Dann versuch mal was in a_b einzufügen
Code:
 insert into a_b values (1,1,1)

Die INSERT-Anweisung steht in Konflikt mit der FOREIGN KEY-Einschrnkung "fk_a". Der Konflikt trat in der blabla-Datenbank, Tabelle "dbo.a", column 'abanr' auf.

Gruß Charly
 

hendrik

Neuer Benutzer
Beiträge
4
AW: Referentielle Integrität mittels SQL Statement überprüfen?

Hallo,
danke für die schnelle Antwort. Leider geht es aus der Ausgabenstellung nicht hervor, ob die Tabellen gefüllt sind, oder nicht.

Müsste man bei gefüllten Tabellen nicht mit einem Join überprüfen können, on für jeden FS Wert auch wirklich ein PS Wert existiert? Vielleicht kann man ja auch mit einem IS NULL Statement arbeiten... :confused:

Danke derweil, ich bastele mal weiter aber bisher bekomme ich so viele Syntax Fehler...
 

Charly

Datenbank-Guru
Beiträge
306
AW: Referentielle Integrität mittels SQL Statement überprüfen?

Hallo hendrik,

was hällst du hiervon:

Code:
SELECT distinct a_b.abnr,a.anr,b.bnr FROM a_b
join a on a_b.abanr<>a.anr
join b on a_b.abbnr<>b.bnr
where a_b.abnr not in
(SELECT a_b.abnr FROM a_b
join a on a_b.abanr=a.anr
join b on a_b.abbnr=b.bnr)
AND a.anr not in(SELECT abanr FROM a_b)
AND b.bnr not in(SELECT abbnr FROM a_b)

Wenn alles OK ist dürfte die Abfrage keine Zeilen zurückgeben. Andernfalls werden Zeilen zurückgegeben.

Gruß Charly
 

hendrik

Neuer Benutzer
Beiträge
4
AW: Referentielle Integrität mittels SQL Statement überprüfen?

Recht vielen Dank, ich werde es gleich mal testen...
 

hendrik

Neuer Benutzer
Beiträge
4
AW: Referentielle Integrität mittels SQL Statement überprüfen?

Wenn alles OK ist dürfte die Abfrage keine Zeilen zurückgeben. Andernfalls werden Zeilen zurückgegeben.

Einen Fehler habe ich damit nicht produziert. Ich habe die Tabellen gefüllt, und RI nachträglich aktiviert. Dabei fehlte in der Tabelle A_B eine Beziehung zu A. Daher hätte er meines Verständnisses nach einen Datensatz ausgeben müssen, hat er aber nicht.

Trotzdem danke. Mich regen diese fingierten Fragestellungen echt auf. Ich könnte ja mal zur allgemeinen Belustigung ein paar Fragen online stellen...
 
Werbung:

Charly

Datenbank-Guru
Beiträge
306
AW: Referentielle Integrität mittels SQL Statement überprüfen?

Hallo hendrik,

ich habe in jeder Tabelle einen Datensatz gehabt der nicht in den anderen Tabelle gestanden hat.

Zu wenig Tests durchgeführt:eek:

[EDIT]

So, jetzt hat mich der Ergeiz aber gepackt. Das muss doch gehen. Ich kann doch hier nicht Tagelang auf der Leitung stehen.


Code:
SELECT abnr AS TEST FROM a_b
WHERE abnr NOT IN (SELECT a_b.abnr FROM a_b
 join a on a_b.abanr=a.anr
 join b on a_b.abbnr=b.bnr)
UNION
SELECT anr AS TEST FROM a
WHERE anr NOT IN (SELECT a.anr FROM a_b
 join a on a_b.abanr=a.anr)
UNION
SELECT bnr AS TEST FROM b
WHERE bnr NOT IN (SELECT b.bnr FROM a_b
 join b on a_b.abbnr=b.bnr)

Das wars doch jetzt hoffentlich;)

Gruß Charly
 
Oben