2012-12-22 14 views
7

मेरे पास एक टेबल लेनदेन है जहां मैं एक लेनदेन के लिए दो रिकॉर्ड सहेज रहा हूं, एक डेबिटिंग और अन्य क्रेडिटिंग के लिए।परस्पर अनन्य तालिका कॉलम कैसे बनाएं

तो मेरे पास तालिका creditAmount(Money) और debitAmount(Money) में दो कॉलम हैं।

मुझे एक टेबल स्तर की बाधा चाहिए कि कॉलम में से कोई भी प्रत्येक पंक्ति में शून्य न हो। यानी यदि पंक्ति # 3 creditAmount शून्य है तो debitAmount में कुछ मूल्य और उपाध्यक्ष होना चाहिए।

पंक्ति में रिकॉर्ड डालने पर वही सुनिश्चित कैसे करें?

+4

क्यों एक स्तंभ और ध्वज 'सी' या 'डी' का संकेत नहीं है? –

+1

बस उत्सुक है, लेकिन क्रेडिट या डेबिट को इंगित करने के लिए पर्याप्त मूल्य का संकेत क्यों नहीं है? – HABO

+0

आवश्यकता है, मैं इसे बदल नहीं सकता। – MaxRecursion

उत्तर

13

आप मेज पर एक CHECK constraint जोड़ सकते हैं:

ALTER TABLE Transactions ADD CONSTRAINT CK_Transactions_DebitOrCreditExists 
CHECK ((creditAmount IS NULL AND debitAmount IS NOT NULL) 
    OR (creditAmount IS NOT NULL AND debitAmount IS NULL)) 
+0

अपडेट किया गया। मार्टिन धन्यवाद! –

0

आप सामने वाले अंत (अपने आवेदन) के माध्यम से संभाल रहे हैं, तो दोनों क्रेडिट और डेबिट अशक्त होने का मुद्दा उठता नहीं होंगे। डेबिट या क्रेडिट में कम से कम एक प्रविष्टि डाली जाती है।

मुझे लगता है कि जब कोई बैक-एंड के माध्यम से काम कर रहा है और सीधे तालिका में मूल्य डालने पर बाधा डालना चाहता है तो मुझे बाधा डालना है। उस मामले में, क्रिस ने एक समाधान का सुझाव दिया।

लेकिन यदि आप बैक-एंड से सम्मिलित हैं, तो भी मैं निम्नलिखित नहीं हूं कि मैं लेनदेन रिकॉर्ड क्यों करूंगा जब न तो यह डेबिट और न ही क्रेडिट हो।

+0

असल में यह एक सेवा है और एक सेवा देव के रूप में मैं पूरी तरह से मुझे भेजे गए डेटा पर भरोसा नहीं कर सकता। तो, यह सिर्फ सावधानी के लिए है। – MaxRecursion

+0

सभी स्तरों पर अपने डेटा को सत्यापित करने के लिए यह अच्छा है। सी.एफ़ वह मामला जहां कोई व्यक्ति मैन्युअल रूप से डीबी में डेटा दर्ज कर रहा है और किसी भी फ्रंट-एंड या वास्तव में व्यावसायिक परत सत्यापन तर्क को छोड़ देता है। – 5arx

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