2010-05-04 6 views
7

मैं एक मेज मिल गया है के रूप में परिभाषित:प्राथमिक कुंजी के हिस्से के रूप में एक गणना कॉलम का उपयोग करना एक अच्छा विचार है?

OrderID bigint NOT NULL, 
IDA varchar(50) NULL, 
IDB bigint NULL, 
[ ... 50 other non relevant columns ...] 

इस तालिका के लिए प्राकृतिक प्राथमिक कुंजी (OrderID, आईडीए, आईडीबी) होगा, लेकिन यह यह संभव नहीं है क्योंकि आईडीए और आईडीबी अशक्त हो सकता है (वे कर सकते हैं दोनों शून्य हो, लेकिन वे दोनों एक ही समय में परिभाषित नहीं होते हैं)। अभी मुझे उन 3 कॉलम पर एक अनूठी बाधा मिली है।

  • एक पहचान स्तंभ बना सकते हैं और के रूप में एक प्राथमिक कुंजी
  • बनाएँ इसका इस्तेमाल:

    अब, बात मैं एक प्राथमिक कुंजी की जरूरत व्यवहार प्रतिकृति सक्षम करने के लिए, और मैं दो विकल्प के साथ सामना कर रहा हूँ है गैर-शून्य गणना वाले कॉलम सी या तो आईडीए या आईडीबी या '' यदि दोनों कॉलम शून्य थे, और मेरी प्राथमिक कुंजी के रूप में (ऑर्डर आईडी, सी) का उपयोग करें।

दूसरा विकल्प तेजी क्लीनर के रूप में मेरी पी सार्थक होगा, और संभव है (msdn link देखें), लेकिन जब से मैं इस कहीं भी किया कभी नहीं देखा है, मैं सोच रहा था कि अगर वे इस दृष्टिकोण के लिए कुछ विपक्ष थे।

उत्तर

2

कॉलम, जो शून्य हो सकता है, एक पीके के हिस्से के रूप में योग्य नहीं है, क्योंकि एक पीके भी अद्वितीय होना चाहिए।

इसके अलावा एक पीके कभी सार्थक नहीं होना चाहिए, क्योंकि मूल्य का अर्थ बदल सकता है।

क्या तालिका ए और बी का रिश्ता है? रिलेशनल डेटा मॉडल देखें। डिजाइन में एक गलती हो सकती है।

ऑर्डर आईडी अद्वितीय होना चाहिए और इसलिए पीके के लिए पर्याप्त होना चाहिए।

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

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