2012-10-11 26 views
5

के साथ कार्डिनलिटी लागू करें।एसक्यूएल: आरेख की व्याख्या करने के लिए दावे

दो संस्थाओं: ई 1 & E2

प्रमुखता:

-से E1 E2 (संबंध आर के माध्यम से) के लिए: (6,50)

-से E2 E1 के लिए (संबंध आर के माध्यम से) : (3,5)

______    ^   ______ 
| E1 |___(6,50)____/R\____(3,5)___| E2 | 
|______|    \/   |______| 
         v 

मुझे कार्डिनालिटी लागू करने के लिए माना जाता है लेकिन पुस्तक एस्सारियन विवरण में बहुत अधिक नहीं है। क्या यह कार्डिनलिटी को लागू करने का सही तरीका होगा?

CREATE ASSERTION assert 
CHECK ((SELECT COUNT(E1.ID) FROM E1) >= 6 AND 
     (SELECT COUNT(E1.ID) FROM E1) <= 60 AND 
     (SELECT COUNT(E2.ID) FROM E2) >= 3 AND 
     (SELECT COUNT(E2.ID) FROM E2) <= 5); 
+0

मैं के बाद से आप एक साथ 2 तालिकाओं में –

+0

नहीं देख सकते हैं कि यह कैसे लागू किया जा सकता का पता नहीं है: यह स्थगित बाधाओं और लेनदेन के सामान्य उपयोगों में से एक है। – RichardTheKiwi

+0

@RichardTheKiwi नहीं सम्मिलित कर सकते हैं, किसी भी डीबीएमएस वास्तव में समर्थन करता है, ऐसे दावे – beldaz

उत्तर

3

मुझे किसी भी डीबीएमएस के बारे में पता नहीं है जिसने दावे को लागू किया है। वाक्य रचना Mimer online SQL-92 syntax validator पर जाँच की जा सकती:

CREATE ASSERTION assertion_R 
    CHECK (NOT EXISTS 
      (SELECT * 
       FROM E1 
       LEFT JOIN R 
        ON R.e1_id = E1.id 
       GROUP BY E1.id 
       HAVING COUNT(R.e1_id) NOT BETWEEN 6 AND 60 
      ) 
     AND NOT EXISTS 
      (SELECT * 
       FROM E2 
       LEFT JOIN R 
        ON R.e2_id = E2.id 
       GROUP BY E2.id 
       HAVING COUNT(R.e2_id) NOT BETWEEN 3 AND 5 
      ) 
     ) ; 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^