我有一个包含3列的表格,其中存储了预订广告位(bookID,预订,预订)。 存在第二个表,其中存储了用户的凭证(crID,电子邮件,密码)。 还有一个存储最终用户的第3个表(enduserID,name,lastname)
目标是bookingslots表的bookedfrom列引用凭证表的crID和endusers表的enduserID。
所以我们有一列分别引用两个表中的2列。
此外,endusers表引用凭证表。 您看到的一点是,虽然该站点的注册用户,其凭据将保存在凭证表中,其他数据(如姓名和姓氏)将保存在最终用户表中 - 预订表中的预订从列将参考凭证表中的crID -...可以选择为非注册用户进行预订,这意味着凭证表中不会有任何条目,但只有endusers表中的条目,因此预订了col还必须参考andusers表。
有人说......恐怕我们可能在预订槽表中有插入异常,bookID可能会引用crID为6而enduserID为6。
你怎么看?以上架构是否存在任何问题......就像提到的那样......这里是sql代码:CREATE TABLE IF NOT EXISTS `appointments`.`appointments` (
`AppointId` INT NOT NULL AUTO_INCREMENT ,
`bookedFrom` INT(11) NOT NULL ,
`bookedFor` INT(11) NOT NULL ,
PRIMARY KEY (`AppointId`) ,
UNIQUE INDEX `bookedFrom_UNIQUE` (`bookedFrom` ASC) ,
UNIQUE INDEX `bookedFor_UNIQUE` (`bookedFor` ASC) ,
CONSTRAINT `fk_appointments_credentials1`
FOREIGN KEY (`bookedFrom` )
REFERENCES `appointments`.`credentials` (`crID` )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_appointments_credentials2`
FOREIGN KEY (`bookedFor` )
REFERENCES `appointments`.`credentials` (`crID` )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_appointments_end_users1`
FOREIGN KEY (`bookedFrom` )
REFERENCES `appointments`.`end_users` (`crID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
CREATE TABLE IF NOT EXISTS `appointments`.`credentials` (
`crID` INT(11) NOT NULL AUTO_INCREMENT ,
`email` VARCHAR(255) NULL ,
`password` VARCHAR(100) NULL ,
`hash` VARCHAR(32) NULL ,
PRIMARY KEY (`crID`) ,
UNIQUE INDEX `email_UNIQUE` (`email` ASC) )
ENGINE = InnoDB
AUTO_INCREMENT = 2
DEFAULT CHARACTER SET = utf8
CREATE TABLE IF NOT EXISTS `appointments`.`end_users` (
crID` INT(11) NOT NULL AUTO_INCREMENT ,
name` VARCHAR(100) NULL DEFAULT NULL ,
lastname` VARCHAR(100) NULL DEFAULT NULL ,
PRIMARY KEY (`crID`) ,
CONSTRAINT `fk_end_users_credentials1`
FOREIGN KEY (`crID` )
REFERENCES `appointments`.`credentials` (`crID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8