मेरे पास SQL Server 2008 में परिभाषित अनुक्रमित दृश्य है (आप परीक्षण उद्देश्यों के लिए जिस्ट से एक कामकाजी स्कीमा डाउनलोड कर सकते हैं):
CREATE VIEW dbo.balances
WITH SCHEMABINDING
AS
SELECT
user_id
, currency_id
, SUM(transaction_amount) AS balance_amount
, COUNT_BIG(*) AS transaction_count
FROM dbo.transactions
GROUP BY
user_id
, currency_id
;
GO
CREATE UNIQUE CLUSTERED INDEX UQ_balances_user_id_currency_id
ON dbo.balances (
user_id
, currency_id
);
GO
user_id
, currency_id
और transaction_amount
सभी को NOT NULL
कॉलम के रूप में परिभाषित किया गया है dbo.transactions
। हालाँकि, जब मैं प्रबंधन स्टूडियो के ऑब्जेक्ट एक्सप्लोरर में दृश्य परिभाषा को देखता हूं, तो यह दृश्य में दोनों balance_amount
और transaction_count
जैसे - जैसे NULL
स्तंभों को चिह्नित करता है ।
मैंने कई चर्चाओं पर एक नज़र डाली है, यह उनमें से सबसे अधिक प्रासंगिक है, जो सुझाव देता है कि कार्यों में कुछ फेरबदल करने से SQL सर्वर को पहचानने में मदद मिल सकती है कि एक दृश्य स्तंभ हमेशा होता है NOT NULL
। मेरे मामले में ऐसा कोई फेरबदल संभव नहीं है, हालांकि, अनुक्रमित विचारों में समग्र कार्यों (जैसे एक ISNULL()
से अधिक SUM()
) पर अभिव्यक्तियों की अनुमति नहीं है ।
क्या कोई ऐसा तरीका है जिससे मैं SQL सर्वर को पहचानने में मदद कर सकता हूं
balance_amount
औरtransaction_count
यह संभव हैNOT NULL
?यदि नहीं, तो क्या मुझे इन स्तंभों के बारे में कोई चिंता होनी चाहिए जो गलती से पहचाने जाने योग्य हैं
NULL
?मैं जिन दो चिंताओं के बारे में सोच सकता था, वे हैं:
- संतुलन को देखने के लिए मैप की गई कोई भी एप्लिकेशन ऑब्जेक्ट संतुलन की गलत परिभाषा प्राप्त कर रही है।
- बहुत सीमित मामलों में, कुछ ऑप्टिमाइज़ेशन क्वेरी ऑप्टिमाइज़र के लिए उपलब्ध नहीं हैं, क्योंकि यह इस बात की गारंटी नहीं है कि ये दो कॉलम हैं
NOT NULL
।
क्या इन चिंताओं में से एक बड़ी बात है? क्या कोई अन्य चिंताएँ हैं जिन्हें मुझे ध्यान में रखना चाहिए?