इस प्रणाली में, हम उत्पादों को स्टोर करते हैं, उत्पादों की छवियां (उत्पाद के लिए कई छवियां हो सकती हैं), और उत्पाद के लिए एक डिफ़ॉल्ट छवि। डेटाबेस:एसक्यूएल में, क्या यह एक दूसरे के संदर्भ में दो तालिकाओं के लिए ठीक है?
CREATE TABLE `products` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`DESCRIPTION` text NOT NULL,
`ENABLED` tinyint(1) NOT NULL DEFAULT '1',
`DATEADDED` datetime NOT NULL,
`DEFAULT_PICTURE_ID` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `Index_2` (`DATEADDED`),
KEY `FK_products_1` (`DEFAULT_PICTURE_ID`),
CONSTRAINT `FK_products_1` FOREIGN KEY (`DEFAULT_PICTURE_ID`) REFERENCES `products_pictures` (`ID`) ON DELETE SET NULL ON UPDATE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
CREATE TABLE `products_pictures` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`IMG_PATH` varchar(255) NOT NULL,
`PRODUCT_ID` int(10) unsigned NOT NULL,
PRIMARY KEY (`ID`),
KEY `FK_products_pictures_1` (`PRODUCT_ID`),
CONSTRAINT `FK_products_pictures_1` FOREIGN KEY (`PRODUCT_ID`) REFERENCES `products` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
के रूप में आप देख सकते हैं, products_pictures.PRODUCT_ID -> products.ID
और products.DEFAULT_PICTURE_ID -> products_pictures.ID
, तो एक चक्र संदर्भ। ठीक है न?
यह लेकिन इस पर भरोसा नहीं करना चाहिए। आप कुछ रिकॉर्ड जोड़ने का प्रयास क्यों नहीं करते हैं और फिर उन्हें हटाने का प्रयास करते हैं। – Deepesh