我正在使用PHPMyAdmin(so mySQL)来创建它。SQL将b和b指向
我有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照片
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
为什么不在照片表中添加一列'''tinyint(1)'''其中1 =专辑封面,否则为0。更好的是,用封面照片的关键字添加专栏。如果相关照片记录被删除,或者相册标识已更改为该照片,则可能需要一些触发器来清除该列。 –
@SloanThrasher是的,我可以做到这一点。我的做法是错误的还是只是不好的做法? –
您可以通过将“Albums.FotoID”设置为空值来使“专辑封面”可选;允许你插入一个空白的专辑,然后将其引用设置为“封面”。 (就我个人而言,我会远离照片上的“封面旗帜”;这不是一个可怕的想法或任何事情,只是不热衷于无法约束的旗帜领域的想法。) – Uueerdo