SQL Transacr SQL - Fehler beim FOREIGN KEY

rejoice

Lt. Junior Grade
Registriert
Jan. 2008
Beiträge
291
Hallo

Ich habe ein Problem beim Fremdschlüssel anlegen. Das System ist ein Microsoft SQL Server 2008R2. Es können immer nur zwei Fremdschlüssel angelegt werden - der 3. klappt nie -dabei ist es egal in welcher Reihenfolge ich die Fremdschlüssel anlege. Die Fehlermeldung:

Das Einführen der FOREIGN KEY-Einschränkung 'fk_Seminarsprecher' für die Seminar-Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen.

ich verstehe es nur nicht.... Wo entsteht da eine schleife?
In MySql klappt das wunderbar....


USE Datenbank;
GO
CREATE TABLE Studenten
(
StudentenID int CONSTRAINT pk_Studenten PRIMARY KEY,
Vorname varchar(80) NOT NULL,
Nachname varchar(80) NOT NULL
);

CREATE TABLE Seminar
(
SeminarID int CONSTRAINT pk_Seminar PRIMARY KEY,
Name varchar(80) NOT NULL,
Seminarsprecher int NULL
);

CREATE TABLE Zugehörigkeit
(
StudentenID int NOT NULL,
SeminarID int NOT NULL
)

ALTER TABLE Zugehörigkeit ADD CONSTRAINT fk_StudentenID FOREIGN KEY (StudentenID)
REFERENCES Studenten ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE Zugehörigkeit ADD CONSTRAINT fk_SeminarID FOREIGN KEY (SeminarID)
REFERENCES Seminar ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE Seminar ADD CONSTRAINT fk_Seminarsprecher FOREIGN KEY (Seminarsprecher)
REFERENCES Studenten ON UPDATE CASCADE ON DELETE SET NULL;
 
Zuletzt bearbeitet:
Hi,

du hast einmal die Verbindung Zugehörigkeit auf Student, dann Zugehörigkeit auf Seminar und dann Seminar auf Student - womit wir einen geschlossenen Zirkelbezug hätten, siehe deine Fehlermeldung.

Das Einführen der FOREIGN KEY-Einschränkung 'fk_Seminarsprecher' für die Seminar-Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen.

So würde ich das auf den ersten Blick beschreiben, kann mich aber natürlich auch täuschen.

Du verwendest in MySQL ja wohl kaum die gleiche Syntax - wie sieht da genau deine Anweisung aus? Poste die doch auch mal.

VG,
Mad
 
aber es passiert ja nicht in diesem kreis...


Wenn ich Student lösche dann wird die betroffene Zeile in der Zugehörigkeit gelöscht und im Seminar auf Null gesetzt

Wenn ich ein Seminar lösche dann wird die betroffene Zeile in der Zugehörigkeit gelöscht

Wenn ich eine zeile zugehörigkeit lösche passiert gar nichts


Wenn ich den 3. Fremdschlüssel mit:
ON CASCADE NO ACTION ON DELETE NO ACTION
schreibe geht es ja aber da wird mein Seminarsprecher nicht auf NULL gesetzt

In MySQL hab ich nur die Fremschlüssel noch als Index gesetzt. Hier der CODE

-- phpMyAdmin SQL Dump
-- version 3.5.2.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 20. Sep 2012 um 15:30
-- Server Version: 5.1.63-0+squeeze1
-- PHP-Version: 5.3.3-7+squeeze14

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Datenbank: `usr_web246_4`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `seminar`
--

CREATE TABLE IF NOT EXISTS `seminar` (
`seminarid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET latin1 NOT NULL,
`seminarsprecher` int(11) DEFAULT NULL,
PRIMARY KEY (`seminarid`),
KEY `seminarsprecher` (`seminarsprecher`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `student`
--

CREATE TABLE IF NOT EXISTS `student` (
`studentid` int(11) NOT NULL AUTO_INCREMENT,
`vorname` varchar(100) CHARACTER SET latin1 NOT NULL,
`nachname` varchar(100) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`studentid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `zugehörigkeit`
--

CREATE TABLE IF NOT EXISTS `zugehörigkeit` (
`studentid` int(11) NOT NULL,
`seminarid` int(11) NOT NULL,
KEY `studentid` (`studentid`,`seminarid`),
KEY `seminarid` (`seminarid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;

--
-- Constraints der exportierten Tabellen
--

--
-- Constraints der Tabelle `seminar`
--
ALTER TABLE `seminar`
ADD CONSTRAINT `seminar_ibfk_1` FOREIGN KEY (`seminarsprecher`) REFERENCES `student` (`studentid`) ON DELETE CASCADE ON UPDATE SET NULL;

--
-- Constraints der Tabelle `zugehörigkeit`
--
ALTER TABLE `zugehörigkeit`
ADD CONSTRAINT `zugeh@1irigkeit_ibfk_2` FOREIGN KEY (`seminarid`) REFERENCES `seminar` (`seminarid`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `zugeh@1irigkeit_ibfk_1` FOREIGN KEY (`studentid`) REFERENCES `student` (`studentid`) ON DELETE CASCADE ON UPDATE CASCADE;
 
Zuletzt bearbeitet:
Hi,

sehr komisch... muss ich mir nochmal ansehen.

Hier hat jemand genau das gleiche Problem und im letzten Beitrag ist ein Link auf die MS Seite, vielleicht steht da noch was drin.

VG,
Mad
 
jupp in dem Forum war ich auch schon und dort wurde mir gesagt das es ein allgemeines Problem ist von Microsoft ist....

Ich werde mit wohl andere Lösungen überlegen. also davon mal abgesehen das es eine Klausuraufgabe war und so wohl erstmal nicht wieder kommt....
 
Zurück
Oben