我得到了一張表user
,一張表assignment
和一張表candidation
(帶有一個主要的,而不是自然的),它有兩個外鍵。它們都是1:nc,表示不一定有用戶進行候選(用戶刪除)或分配(分配已刪除)。我如何避免在mysql中有兩個外鍵的空值?
現在我怎麼能避免在中有NULL
這兩個外鍵?
USER:
-- Table `Ressource-Management`.`user`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Ressource-Management`.`user` (
`iduser` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '',
`name_first` VARCHAR(50) NOT NULL COMMENT '',
`name_last` VARCHAR(50) NOT NULL COMMENT '',
`attendance` INT UNSIGNED NOT NULL COMMENT '',
`can_own` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '',
PRIMARY KEY (`iduser`) COMMENT '')
ENGINE = InnoDB;
作業:
-- -----------------------------------------------------
-- Table `Ressource-Management`.`assignment`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Ressource-Management`.`assignment` (
`idassignment` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '',
`owner` INT UNSIGNED NOT NULL COMMENT '',
`budget` INT UNSIGNED NOT NULL COMMENT '',
`priority` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '',
`date_to` DATETIME NULL COMMENT '',
PRIMARY KEY (`idassignment`) COMMENT '',
INDEX `fk_assignment_user_idx` (`owner` ASC) COMMENT '',
CONSTRAINT `fk_assignment_user`
FOREIGN KEY (`owner`)
REFERENCES `Ressource-Management`.`user` (`iduser`)
ON DELETE RESTRICT
ON UPDATE CASCADE)
ENGINE = InnoDB;
CANDIDATION:
-- -----------------------------------------------------
-- Table `Ressource-Management`.`candidation`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Ressource-Management`.`candidation` (
`idcandidation` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '',
`user_iduser` INT UNSIGNED NULL COMMENT '',
`assignment_idassignment` INT UNSIGNED NULL COMMENT '',
`date_from` DATETIME NOT NULL COMMENT '',
`date_to` DATETIME NOT NULL COMMENT '',
`status` LONGBLOB NULL DEFAULT offen COMMENT '',
`message` VARCHAR(4096) NULL COMMENT '',
PRIMARY KEY (`idcandidation`) COMMENT '',
INDEX `fk_user_has_assignment_assignment1_idx` (`assignment_idassignment` ASC) COMMENT '',
INDEX `fk_user_has_assignment_user1_idx` (`user_iduser` ASC) COMMENT '',
UNIQUE INDEX `user_assignment_UNIQUE` (`user_iduser` ASC, `assignment_idassignment` ASC) COMMENT '',
CONSTRAINT `fk_user_has_assignment_user1`
FOREIGN KEY (`user_iduser`)
REFERENCES `Ressource-Management`.`user` (`iduser`)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT `fk_user_has_assignment_assignment1`
FOREIGN KEY (`assignment_idassignment`)
REFERENCES `Ressource-Management`.`assignment` (`idassignment`)
ON DELETE SET NULL
ON UPDATE CASCADE)
ENGINE = InnoDB;
你可以在外部表'tableA'的一個創建觸發器和丟棄刪除,如果已經在其他創建觸發器一個'tableB'是'NULL'。 –
@JuanCarlosOropeza需要兩張桌子才能生效。 _But ..我不喜歡觸發器.._ – inetphantom