ER प्रतिरूप, संबंधात्मक बीजगणित, टपल कैलकुलस व SQL
COUNT(*) व COUNT(x) भिन्न हैं, AVG वह SUM/COUNT(*) नहीं, और एकमात्र शून्य मान लौटाती NOT IN उप-पृच्छा आपको कुछ भी नहीं लौटाती।ER से सारणियाँ: कोटिकता गिनती है, सहभागिता शून्य मान
| संरचना | न्यूनतम सारणियाँ | क्यों |
|---|---|---|
| M:N संबंध | 3 | कोई कुंजी दूसरी को निर्धारित नहीं करती, अतः युग्मों को अपनी सारणी चाहिए |
| 1:N संबंध | 2 | प्रत्येक N-पक्ष पंक्ति का अधिकतम एक साथी है, अतः वह विदेशी कुंजी रखती है |
| 1:1 संबंध | 2 | किसी भी पक्ष में समाएँ; पूर्ण सहभागी को वरीयता दें |
| दुर्बल सत्ता-समुच्चय | +1 | उसकी अपनी सारणी, जिसकी प्राथमिक कुंजी में स्वामी की कुंजी सम्मिलित |
| बहुमानी गुण | +1 | प्रति मान एक पंक्ति; 1NF में स्तंभ समुच्चय नहीं रख सकता |
NOT NULL है, जो कठोरतः श्रेष्ठ है पर भिन्न गिनती नहीं। अतः जब प्रश्न सारणियों की न्यूनतम संख्या पूछे, केवल कोटिकता पढ़ें; जब वह पूछे कि कोई विघटन शून्य मान टालता है क्या, या विदेशी कुंजी NOT NULL घोषित हो सकती है क्या, तो सहभागिता पढ़ें। सहभागिता गिनती को एक ही स्थान पर हिलाती है: ऐसा अभिकल्प जो सिद्धांततः शून्य मान अस्वीकार करे; तब आंशिक 1:1 को तीसरी सारणी चाहिए, क्योंकि किसी भी ओर समाना उन्हें बाध्य करता है।पाँच संकारक, तथा विभाजन किससे बना है
संबंधात्मक बीजगणित में ठीक पाँच मूल संकारक हैं — चयन σ, प्रक्षेपण π, सम्मिलन ∪, समुच्चय अंतर −, तथा कार्तीय गुणन × — और शेष सब संक्षेपण है। सर्वनिष्ठ R − (R − S) है। प्राकृतिक संयोजन कार्तीय गुणन है, फिर समान गुणों पर चयन, फिर द्विरुक्त स्तंभ हटाता प्रक्षेपण। विभाजन वही है जो मूल दिखता है और नहीं है, और उसका निष्पादन एक बार करने योग्य है क्योंकि निष्पादन ही अंतर्दृष्टि है: R ÷ S R के शेष गुणों पर वे मान माँगता है जो S के प्रत्येक टपल के साथ आते हैं, और केवल मूल संकारकों से उसे निकालने का मार्ग है उन्हें खोजना जो विफल होते हैं और उन्हें घटाना।
c1, c2, c3 हैं, और s1 व s4 तीनों लेते हैं जबकि s2 दो व s3 एक। तब πsid(R) है {s1, s2, s3, s4}, कार्तीय गुणन में 12 युग्म हैं, R घटाने से ठीक (s2,c3), (s3,c2), (s3,c3) बचते हैं, जिनका प्रक्षेपण {s2, s3} है — और {s1,s2,s3,s4} − {s2,s3} है {s1, s4}, जो विभाजन का अर्थ है। विभाजन का परीक्षणीय रूप सदा यही है: किसी समुच्चय के सब से संबंधित सत्ताएँ खोजें, और प्रश्न में “सब” वाक्यांश ही बताता है कि उत्तर को वह चाहिए।| R (n टपल) व S (m टपल) पर संक्रिया | न्यूनतम | अधिकतम |
|---|---|---|
| R × S (कार्तीय गुणन) | n × m | n × m — यह यथातथ्य है |
| साझा गुण पर प्राकृतिक संयोजन | 0 — कोई मेल खाता मान नहीं | n × m — सर्वत्र एक ही साझा मान |
| R ∪ S (समान स्कीमा) | max(n, m) — एक दूसरे को समाविष्ट करता | n + m — असंयुक्त |
| R − S | 0 — R ⊆ S | n — असंयुक्त |
| गैर-कुंजी गुण-सूची पर π | 1 | n — प्रक्षेपण द्विरुक्तियाँ हटाता है |
| वाम बाह्य संयोजन | n — प्रत्येक R टपल बचता है | n × m |
टपल कैलकुलस, तथा पाठ्यक्रम उसे क्यों नामित करता है
टपल संबंधात्मक कैलकुलस किसी पृच्छा को { t | P(t) } के रूप में लिखता है — वे टपल t जो किसी प्रथम-कोटि सूत्र P को संतुष्ट करते हैं — और वह घोषणात्मक है: वह कहता है उत्तर में क्या है, कभी नहीं कि उसे कैसे निकालें। जहाँ बीजगणित πname(σdept = "Sales"(Emp)) लिखता है, कैलकुलस लिखता है { t.name | Emp(t) ∧ t.dept = “Sales” }। परिमाणक वही कार्य करते हैं जो बीजगणित में संयोजन: दूसरे संबंध पर ∃ एक संयोजन है, और ∀ एक विभाजन। प्रांत संबंधात्मक कैलकुलस वही वस्तु है जिसमें चर सम्पूर्ण टपलों के बजाय गुण-मानों पर विचरते हैं, और दोनों तुल्य हैं।
{ t | ¬ Emp(t) } वैध सूत्र है और विश्व के प्रत्येक उस टपल का नाम लेता है जो कर्मचारी नहीं — अनंत उत्तर। कोई व्यंजक सुरक्षित कहा जाता है जब उसका परिणाम परिमित प्रत्याभूत हो, जिसका व्यवहार में अर्थ है प्रत्येक चर किसी संबंध से परिबद्ध हो। इसका महत्व वह प्रमेय है जिसकी ओर पाठ्यक्रम संकेत कर रहा है: संबंधात्मक बीजगणित, सुरक्षित टपल कैलकुलस व सुरक्षित प्रांत कैलकुलस की अभिव्यक्ति-शक्ति ठीक समान है। तीन संकेतन, पृच्छाओं का एक वर्ग — और वही यह कहना अर्थपूर्ण बनाता है कि कोई पृच्छा अभिव्यक्तनीय नहीं है। और ऐसी पृच्छा का मानक उदाहरण संक्रमणीय संवर्त है: संबंध Parent(x, y) से आप संबंधात्मक बीजगणित में Ancestor(x, y) नहीं लिख सकते, क्योंकि नियत व्यंजक में संयोजनों की संख्या नियत है और पूर्वजता को असीमित रूप से अनेक चाहिए। वह आपकी पृच्छा-लेखन का अभाव नहीं; वह सिद्ध सीमा है, और इसीलिए SQL को WITH RECURSIVE को मिष्टान्न के बजाय विस्तार के रूप में जोड़ना पड़ा। समुच्चयन वही कथा है — COUNT व SUM भी शुद्ध बीजगणित के बाहर हैं, और इसीलिए SQL को समुच्चयों के बजाय बहुसमुच्चयों पर बीजगणित तथा समुच्चयन कहा जाता है।SQL त्रि-मानी है, और वही प्रश्न है
शून्य मान कोई मान नहीं; वह किसी मान की अनुपस्थिति है, और उसे सम्मिलित करती प्रत्येक तुलना सत्य या असत्य के बजाय अज्ञात का मूल्यांकन करती है। NULL = NULL अज्ञात है। NULL <> NULL भी। कोई WHERE उपवाक्य किसी पंक्ति को केवल तब रखता है जब उसकी शर्त सत्य हो, अतः अज्ञात वहाँ असत्य जैसा व्यवहार करता है — पर सर्वत्र नहीं, और वही अंतराल है जहाँ अंक हैं। नीचे के परिणाम ऐसी पाँच-पंक्ति emp सारणी पर बने जिसमें एक वेतन व एक प्रबंधक शून्य हैं।
| पृच्छा | परिणाम | क्यों |
|---|---|---|
COUNT(*) | 5 | पंक्तियाँ गिनता है, और पंक्ति विद्यमान है उसमें कुछ भी हो |
COUNT(salary) | 4 | उस स्तंभ के गैर-शून्य मान गिनता है |
COUNT(DISTINCT salary) | 3 | दो कर्मचारी 70000 साझा करते हैं, और शून्य तब भी छूटता है |
AVG(salary) | 62500 | 250000 / 4 — भाजक गैर-शून्य गिनती है |
SUM(salary) / COUNT(*) | 50000 | 250000 / 5 — भिन्न प्रश्न, 12500 का अंतर |
GROUP BY mgr | 4 समूह | शून्य मान एक समूह बनाते हैं — समूहन उन्हें समान मानता है |
WHERE eid NOT IN (SELECT mgr FROM emp) से माँगना शून्य पंक्तियाँ लौटाता है, यद्यपि ऐसे दो कर्मचारी स्पष्टतः विद्यमान हैं। उसे विस्तारित करें: eid NOT IN (NULL, 1, 1, 2, 3) का अर्थ है eid ≠ NULL AND eid ≠ 1 AND …, और eid ≠ NULL अज्ञात है, अतः सम्पूर्ण संयोजन कभी सत्य नहीं हो सकता — अधिकतम अज्ञात हो सकता है, और WHERE उसे त्याग देता है। दो मरम्मतें, दोनों जानने योग्य। उप-पृच्छा में WHERE mgr IS NOT NULL जोड़ें, और वही पृच्छा दो पंक्तियाँ लौटाती है। या उसे NOT EXISTS (SELECT 1 FROM emp m WHERE m.mgr = e.eid) लिखें, जो उस रक्षक के बिना वे दो पंक्तियाँ लौटाती है — क्योंकि NOT EXISTS पूछता है कि कोई पंक्ति मिली क्या, वस्तुतः द्वि-मानी प्रश्न जिसे शून्य मान विषाक्त नहीं कर सकते। और वह असममिति ध्यान दें जो इसे छूटने योग्य बनाती है: शून्य सहित IN सुरक्षित है (1 IN (1, NULL) सत्य है, क्योंकि एक वियोजक सत्य है), जबकि शून्य सहित NOT IN नहीं। ले जाने योग्य नियम: शून्य-योग्य स्तंभ पर NOT IN तब तक दोष है जब तक अन्यथा सिद्ध न हो; NOT EXISTS को वरीयता दें।मुख्य बिंदु
- कोटिकता न्यूनतम सारणी-गिनती तय करती है: M:N को 3 चाहिए, 1:N व 1:1 को 2, दुर्बल सत्ता एक जोड़ती है।
- सहभागिता तय करती है कि विदेशी कुंजी शून्य हो सकती है क्या, यह नहीं कि सारणियाँ कितनी हैं।
- पाँच मूल संकारक: σ, π, ∪, − व ×। सर्वनिष्ठ, संयोजन व विभाजन सब व्युत्पन्न।
- R ÷ S = πX(R) − πX((πX(R) × S) − R): विफल होते मान खोजें, फिर उन्हें घटाएँ।
- प्राकृतिक संयोजन 0 से n × m टपल तक कुछ भी लौटा सकता है; वाम बाह्य संयोजन कम से कम n लौटाता है।
- बीजगणित, सुरक्षित टपल कैलकुलस व सुरक्षित प्रांत कैलकुलस की अभिव्यक्ति-शक्ति समरूप है।
- संक्रमणीय संवर्त व समुच्चयन शुद्ध संबंधात्मक बीजगणित के बाहर हैं — सिद्ध सीमा, कौशल का अभाव नहीं।
- COUNT(*) पंक्तियाँ गिनता है; COUNT(x) गैर-शून्य मान; AVG(x) गैर-शून्य गिनती से भाग देता है।
- शून्य-योग्य स्तंभ पर NOT IN कुछ नहीं लौटाता; NOT EXISTS सुरक्षित रूप है।
- GROUP BY शून्य मानों को एक समूह मानता है, यद्यपि NULL = NULL अज्ञात है।
अभ्यास प्रश्न (8)
उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।
किसी ER आरेख में दो सत्ता-समुच्चय E1 व E2 एकमात्र M:N संबंध R से जुड़े हैं, और R अपना एक वर्णनात्मक गुण रखता है। संबंधात्मक स्कीमा में सारणियों की न्यूनतम संख्या क्या है?
उत्तर देखें
उत्तर: B — 3
3। M:N संबंध में किसी भी सत्ता की कुंजी दूसरी को निर्धारित नहीं करती, अतः E1 की एक पंक्ति E2 की अनेक पंक्तियों से युग्मित हो सकती है व विलोमतः — किसी भी सत्ता-सारणी में एकमात्र विदेशी कुंजी रखने का स्थान नहीं। अतः युग्मों को अपनी सारणी चाहिए, जिसकी प्राथमिक कुंजी दोनों विदेशी कुंजियाँ मिलकर हैं, और R का वर्णनात्मक गुण वहाँ साधारण स्तंभ के रूप में जाता है। ध्यान दें गुण गिनती नहीं बदलता: तीसरी सारणी पहले से चाहिए थी, और गुण के बिना भी M:N संबंध को एक चाहिए। विकल्प A, 1:N या 1:1 का उत्तर है, जहाँ अनेक-पक्ष (या कोई भी पक्ष) विदेशी कुंजी रख सकता है। विकल्प C संबंध-गुण को अपनी सारणी देने से निकलता, जिसकी कोई आवश्यकता नहीं। यांत्रिक रूप से लगाने योग्य नियम: सारणी-गिनती हेतु कोटिकता पढ़ें, और सहभागिता केवल इसके लिए कि विदेशी कुंजीNOT NULLहो सकती है क्या।सारणी
empमें 5 पंक्तियाँ हैं।salaryस्तंभ 50000, 60000, 70000, 70000 व NULL है।AVG(salary) − SUM(salary)/COUNT(*)का मान ______ हैसंख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: 12500
12500। दोनों व्यंजक केवल अपने भाजक में भिन्न हैं, और वही सम्पूर्ण अभिप्राय है।SUM(salary)शून्य छोड़ता है और 250000 है।AVG(salary)भी शून्य छोड़ता है और गैर-शून्य मानों की गिनती से भाग देता है, अतः वह 250000 / 4 = 62500 है।SUM(salary)/COUNT(*)उसी अंश को पंक्तियों की गिनती से भाग देता है, 250000 / 5 = 50000। अंतर 62500 − 50000 = 12500 है। अतःAVG(x)वहSUM(x)/COUNT(x)है, कभीSUM(x)/COUNT(*)नहीं, और दोनों केवल तब सहमत हैं जब स्तंभ में कोई शून्य न हो। 0 मिलना अर्थात् दोनों को एक ही व्यंजक माना गया, और वही मान्यता तोड़ने हेतु प्रश्न विद्यमान है। उसी स्तंभ पर पूर्णता हेतु:COUNT(*)5 है,COUNT(salary)4, औरCOUNT(DISTINCT salary)3, क्योंकि 70000 दो बार आता है और दोनों स्तंभ-रूपों में शून्य छूटता है।सारणी
emp(eid, mgr)में eid 1..5 तथा mgr मान NULL, 1, 1, 2, 3 वाली पंक्तियाँ हैं। पृच्छाSELECT eid FROM emp WHERE eid NOT IN (SELECT mgr FROM emp)क्या लौटाती है?उत्तर देखें
उत्तर: B — कोई पंक्ति नहीं
कोई पंक्ति नहीं, और यह खंड का सर्वाधिक मूल्यवान शून्य-तथ्य है क्योंकि अभिप्रेत उत्तर इतना स्पष्टतः 4 व 5 है। विधेय विस्तारित करें:eid NOT IN (NULL, 1, 1, 2, 3)हैeid ≠ NULL AND eid ≠ 1 AND eid ≠ 1 AND eid ≠ 2 AND eid ≠ 3। प्रथम संयोजक प्रत्येक पंक्ति हेतु अज्ञात है, क्योंकि शून्य से कोई तुलना कभी सत्य या असत्य नहीं। अज्ञात रखता संयोजन अधिकतम अज्ञात है,WHEREकेवल वे पंक्तियाँ रखता है जहाँ शर्त सत्य हो, और अतः प्रत्येक पंक्ति त्यक्त होती है। विकल्प A वही है जो पृच्छा को लौटाना अभिप्रेत था, और वही किसी भी मरम्मत से मिलता है: उप-पृच्छा मेंWHERE mgr IS NOT NULLजोड़ें, याNOT EXISTS (SELECT 1 FROM emp m WHERE m.mgr = e.eid)के रूप में पुनर्लिखें, जो निरापद है क्योंकि वह मानों की तुलना के बजाय पूछता है कि कोई पंक्ति मिली क्या। असममिति ध्यान दें: सादाINशून्य मानों सहित सुरक्षित है —1 IN (1, NULL)सत्य है, क्योंकि एक वियोजक सत्य है — अतः केवल निषेधित रूप संकटपूर्ण है।संबंध R व S में क्रमशः n व m टपल हैं और वे ठीक एक गुण साझा करते हैं। उनके प्राकृतिक संयोजन में टपलों की संख्या है:
उत्तर देखें
उत्तर: B — 0 व n × m के बीच
0 व n × m के बीच, और दोनों सिरे प्राप्य हैं। निचला सिरा: यदि साझा गुण का कोई मान दोनों संबंधों में न आए, तो कुछ मेल नहीं खाता और परिणाम रिक्त है — संयोजन कुछ लौटाने को बाध्य नहीं। ऊपरी सिरा: यदि R का प्रत्येक टपल व S का प्रत्येक टपल साझा गुण का वही मान रखे, तो प्रत्येक युग्म मेल खाता है और परिणाम पूर्ण n × m है, ठीक जैसे वह कार्तीय गुणन होता। विकल्प C प्रति टपल कम से कम एक मेल मानता है, जिसके लिए ऐसा विदेशी-कुंजी प्रतिबंध चाहिए जो प्रश्न नहीं बताता — वही मान्यता संयोजन-कोटिकता प्रश्नों को लोगों को पकड़ने योग्य बनाती है। विकल्प A कार्तीय गुणन है, जिसमें प्राकृतिक संयोजन केवल ऊपर की अपभ्रष्ट स्थिति में सिमटता है। एक उपयोगी सहचर परिबंध: वाम बाह्य संयोजन कम से कम n टपल लौटाता है, क्योंकि प्रत्येक R टपल बचता है, मेल खाया हो या नहीं।संबंधात्मक बीजगणित व संबंधात्मक कैलकुलस के विषय में निम्नलिखित में से कौन-से सत्य हैं?
उत्तर देखें
उत्तर: A — संबंधात्मक बीजगणित व सुरक्षित टपल संबंधात्मक कैलकुलस की अभिव्यक्ति-शक्ति समान है; B — किसी संबंध का संक्रमणीय संवर्त संबंधात्मक बीजगणित में अभिव्यक्त नहीं किया जा सकता; D — विभाजन केवल पाँच मूल संकारकों से अभिव्यक्त किया जा सकता है
A, B व D। A वही तुल्यता-प्रमेय है जिसकी ओर पाठ्यक्रम टपल कैलकुलस नामित करते समय संकेत करता है, और सुरक्षित शब्द भार वहन करता है: अप्रतिबंधित कैलकुलस{ t | ¬ Emp(t) }लिख सकता है, अनंत उत्तर जो किसी बीजगणित-व्यंजक के पास नहीं। B इससे निकलता है कि A किसी नियत भाषा के विषय में है — बीजगणित-व्यंजक में संयोजनों की संख्या नियत है, जबकि पूर्वजता को असीमित रूप से अनेक चाहिए, और इसीलिए SQL नेWITH RECURSIVEको वास्तविक विस्तार के रूप में जोड़ा। D वह तत्समक है R ÷ S = πX(R) − πX((πX(R) × S) − R), अतः विभाजन मूल के बजाय संक्षेपण है; सर्वनिष्ठ व प्रत्येक संयोजन हेतु भी वही सत्य है। C ठीक उलटा है: बीजगणित प्रक्रियात्मक है — आप उत्तर निकालने वाली संक्रियाओं का क्रम लिखते हैं — और कैलकुलस घोषणात्मक, जो उत्तर को सूत्र से वर्णित करता है और उसे कैसे पाएँ इस विषय में कुछ नहीं कहता। दोनों के बीच स्मरण रखने योग्य वही एक भेद है, और उसे उलट देना यहाँ सर्वाधिक सामान्य त्रुटि है।संबंध
Enrolled(sid, cid)अंकित करता है कौन छात्र कौन-से पाठ्यक्रम लेते हैं, औरRequired(cid)तीन अनिवार्य पाठ्यक्रम सूचीबद्ध करता है। कौन-सी संबंधात्मक बीजगणित संक्रिया उन छात्रों को खोजती है जो तीनों ले रहे हैं?उत्तर देखें
उत्तर: B — विभाजन: Enrolled ÷ Required
विभाजन, और यह बताने वाला वाक्यांश है “तीनों”। विभाजनEnrolled ÷ Requiredठीक वे sid मान लौटाता है जो Required के प्रत्येक cid के साथ युग्मित आते हैं। विकल्प A जाल है और उसकी विफलता का कारण देखने योग्य है: संयोजन के पश्चात् प्रक्षेपण प्रत्येक उस छात्र को लौटाता है जो कम से कम एक अनिवार्य पाठ्यक्रम ले रहा है, क्योंकि प्रक्षेपण यह जाँच नहीं सकता कि तीनों मेल उपस्थित थे — वह पंक्तियाँ पहले ही ढहा चुका है। सामान्य आकार पहचानने योग्य है: “कम से कम एक” संयोजन व प्रक्षेपण है, “सब” विभाजन। विकल्प C तो प्रकार-संगत भी नहीं — सर्वनिष्ठ हेतु दोनों संबंधों की स्कीमा समान चाहिए, और ये भिन्न हैं। विकल्प D बदलता है कि कौन-सी अमेल पंक्तियाँ बचती हैं और पूर्णता के विषय में कुछ उत्तर नहीं देता। यदि उसे मूल संकारकों से निकालना हो, तत्समक है πsid(Enrolled) − πsid((πsid(Enrolled) × Required) − Enrolled): वे छात्र खोजें जिनका कोई अनिवार्य युग्मन अनुपस्थित है, फिर उन्हें घटाएँ।स्तंभ
mgrमें मान NULL, 1, 1, 2, 3 हैं।SELECT mgr, COUNT(*) FROM emp GROUP BY mgrकितने समूह उत्पन्न करती है?उत्तर देखें
उत्तर: B — 4 — शून्य मान अपना एक समूह बनाते हैं
4 — 1, 2, 3 हेतु समूह, तथा एक समूह जो शून्य पंक्ति रखता है। यह SQL में वास्तविक असममिति है और पिछले प्रश्न के साथ रखने योग्य:GROUP BYसमूहन के प्रयोजन हेतु शून्य मानों को परस्पर समान मानता है, यद्यपिNULL = NULLअज्ञात का मूल्यांकन करता है और कोईWHEREउपवाक्य उन्हें उस प्रकार कभी मेल नहीं करा सकता। वही परिपाटीDISTINCTपर लागू है, जो अनेक शून्य मानों को एक में ढहाता है, तथाUNIONपर, जो द्विरुक्त शून्य हटाता है। विकल्प A समूहन को समुच्चयन से भ्रमित करता है: शून्य छोड़ने वाले समुच्चयन फलन हैं — इस स्तंभ परCOUNT(mgr)4 है, 5 नहीं — जबकिGROUP BYउन्हें रखता है। विकल्प C हेतु प्रत्येक मान भिन्न चाहिए, पर 1 दो बार आता है। नियम: शून्य मान समुच्चयन फलनों के भीतर अवहेलित हैं और समूहन,DISTINCTव समुच्चय-संक्रियाओं द्वारा एक मान माने जाते हैं।Parent(child, parent)सारणी में किसी शीर्ष के पूर्वज निकालने हेतु SQL कोWITH RECURSIVEक्यों चाहिए?उत्तर देखें
उत्तर: B — क्योंकि संक्रमणीय संवर्त संबंधात्मक बीजगणित में अभिव्यक्तनीय नहीं, अतः कोई नियत पृच्छा उसे नहीं निकाल सकती
यह भाषा पर सिद्ध सीमा है, निष्पादन या सुविधा का विषय नहीं। संबंधात्मक बीजगणित व्यंजक — और अतः साधारण SQL पृच्छा, जो बहुसमुच्चयों पर वही बीजगणित तथा समुच्चयन है — में संयोजनों की संख्या नियत होती है।Parentको k बार स्व-संयोजित करना ठीक k पीढ़ी ऊपर के पूर्वज खोजता है, अतः कोई नियत पृच्छा प्रश्न का उत्तर केवल परिबद्ध गहराई हेतु देती है, जबकि पूर्वजता अपरिबद्ध है: उत्तर उन आँकड़ों पर निर्भर है जो आपने देखे नहीं। कोई भी चातुर्य वह अंतराल नहीं भरता, और इसीलिएWITH RECURSIVEभाषा का वास्तविक विस्तार है, पहले से लिखने योग्य किसी वस्तु का संक्षेपण नहीं। विकल्प A कारण उलट देता है — पुनरावर्तन अभिव्यक्ति हेतु जोड़ा गया, और वह उसके बिना अभिव्यक्तनीय किसी वस्तु का तीव्रतर मार्ग नहीं। विकल्प C स्कीमा का यथातथ्य वर्णन करता है और कुछ नहीं समझाता; स्व-संदर्भी विदेशी कुंजी साधारण है। विकल्प D अन्यत्र वास्तविक संकट है (शून्य-योग्य स्तंभ परNOT IN) पर बिना किसी शून्य वाली सारणी का संवर्त भी नियत पृच्छा से नहीं निकाला जा सकता।