我使用PHPMyAdmin(所以mySQL)来创建它。
我有2张桌子,相册和照片。当然,照片可以是相册的一部分,为此,我使用从照片到相册的外键。
但是现在我想能够在相册表中放一张照片,这样我就可以将这张照片作为我相册的封面。我试过添加一个外键,但这给了我一个外键约束。
以下表格有助于理解我的意思(foto = photo)。红线表示我想要实现的目标。
我不擅长SQL,所以感谢任何帮助。
SQL专辑:
CREATE TABLE `Albums` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Album_Naam` varchar(255) NOT NULL,
`Aanmaakdatum` datetime NOT NULL,
`FotoID` int(11) DEFAULT '1',
PRIMARY KEY (`ID`),
KEY `FotoID` (`FotoID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
SQL Photo
CREATE TABLE `Foto` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Foto_Naam` varchar(255) NOT NULL,
`AlbumID` int(11) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `AlbumID` (`AlbumID`),
CONSTRAINT `Foto_ibfk_1` FOREIGN KEY (`AlbumID`) REFERENCES `Albums` (`ID`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1
答案 0 :(得分:1)
通过使引用字段可为空,可以使外键成为可选项;字段中的NULL值不违反对其强制执行的外键约束。这可以用来表示纯粹的可选关系,或者在这个问题的情况下,推迟在半循环依赖中设置值。
请注意,要从相册中删除封面照片,相册首先需要将其设置为另一张照片的封面参考,或者为空。同样,要删除相册,您需要将其删除Foto
,因此请先将其设置为空。