मैं धारणाओं के साथ शुरुआत करना चाहूंगा।
- आपके पास एक श्रृंखला जैसा डेटा मॉडल है:परियोजनाएं --* ProjectSchemes --* योजनाएं
- आपका लक्ष्य केवल वैध शृंखला रखना है, इसलिए परियोजना के बिना कोई परियोजना योजना नहीं, परियोजना योजना के बिना कोई योजना नहीं है।
- NULL आपकी किसी एक आईडी के लिए मान्य मान नहीं है।
- सभी आईडी अपनी तालिका में अद्वितीय हैं
- आप अपने डेटाबेस के संदर्भात्मक अखंडता तंत्र का उपयोग नहीं करते हैं
परिणामस्वरूप आपका चयन योजना तालिका में सभी योजनाओं के लिए योजना_आईडी सूचीबद्ध करेगा।
कहा कि, आपको संबंधित प्रोजेक्ट के बिना सभी ProjectSchemes को हटाना शुरू कर देना चाहिए। ये ProjectSchemes हैं जिनमें NULL या एक आईडी है जो प्रोजेक्ट तालिका में मौजूद नहीं है:
DELETE ProjectSchemes WHERE (Project_Id is NULL) OR
(NOT EXISTS (SELECT * FROM Projects WHERE
Projects.Project_Id = ProjectSchemes.Project_Id))
प्रोजेक्ट्स के बिना प्रोजेक्ट्स को हटाने के बाद अब हमारे पास स्कीम टेबल में कुछ नए अनाथ हो सकते हैं। अगली बात अब उन सभी योजनाओं को हटाना है जिनके पास NULL की एक आईडी है या एक आईडी है जो ProjectSchemes तालिका में मौजूद नहीं है:
DELETE Schemes WHERE (Scheme_Id is NULL) OR
(NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
अभी भी ऐसी योजनाएँ होने का मौका है जो ProjectSchemes को हटाए बिना किसी परियोजना से जुड़ी नहीं हैं।