Jan K.: 1 aus 3 Feldern muss gefüllt werden

Beitrag lesen

Hallo Forum,

wie Tom vorgeschlagen hat, habe ich die Aufgabe mit einem Trigger gelöst.
Verbesserungsvorschläge sind erwünscht!

  
DROP TABLE IF EXISTS file;  
  
CREATE TABLE file (  
	fileid 				INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,  
	filename_upload		varchar(255) NOT NULL COMMENT 'NTFS max. filename length=255 UTF8 chars',  
	filename_system		varchar(255) NOT NULL COMMENT 'Konflikte mit filenames andere user vermeidenNOW()',  
	extid				INT UNSIGNED,  
	frontuseid			INT UNSIGNED,  
	userid				INT UNSIGNED DEFAULT NULL,  
	betriebid			INT UNSIGNED DEFAULT NULL,  
	unternid			INT UNSIGNED DEFAULT NULL,  
	FOREIGN KEY (userid) REFERENCES user(userid)  
) ENGINE = InnoDB;  
  
  
DROP TRIGGER IF EXISTS files_insert_nur1PK_aus3PK;  
  
DELIMITER $$  
CREATE TRIGGER files_insert_nur1PK_aus3PK BEFORE INSERT ON file  
FOR EACH ROW BEGIN  
	IF 		(NEW.userid IS NULL AND NEW.betriebid IS NULL AND NEW.unternid IS NULL) OR  
			(NEW.userid IS NULL AND NEW.betriebid>0 AND NEW.unternid>0) OR  
			(NEW.userid>0 AND NEW.betriebid IS NULL AND NEW.unternid>0) OR  
			(NEW.userid>0 AND NEW.betriebid>0 AND NEW.unternid IS NULL) OR  
			(NEW.userid>0 AND NEW.betriebid>0 AND NEW.unternid>0)  
		THEN 	  
			/* Fehlerbedingung=TRUE -> Fehler provozieren um weitere Abarbeitung zu verhindern */  
			INSERT INTO Es_darf_nur_1_aus_3_ID_FK_insertet_werden VALUES(NULL);  
	END IF;  
  
END$$  
DELIMITER ;  
  
#Folgendes INSERT muss funktionieren  
INSERT INTO file VALUES(DEFAULT,"filenameupload.dat","filenameupload.dat",1,1,DEFAULT,8,DEFAULT);  
#Folgendes INSERT muss einen Fehler provozieren  
INSERT INTO file VALUES(DEFAULT,"filenameupload.dat","filenameupload.dat",1,1,2,8,9);