SQL Server 2008'de tanımlanmış aşağıdaki dizinli görünüm var ( test amacıyla gist'ten çalışan bir şema indirebilirsiniz ):
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
ve transaction_amount
içindeki tüm NOT NULL
sütunlar olarak tanımlanır dbo.transactions
. Ancak, Yönetim Studio'nun Nesne Explorer, işaretler hem de görünüm tanımına baktığınızda balance_amount
ve transaction_count
sıra NULL
görünümünde sıfat daha sütunlar.
Bazı tartışmalara göz attım, bunlardan en alakalı olanı, bazı işlevlerin karıştırılmasının SQL Server'ın bir görünüm sütununun her zaman olduğunu tanımasına yardımcı olabileceğini düşündürüyor NOT NULL
. Benim durumumda böyle bir karıştırma mümkün değildir, çünkü indeksli görünümlerde toplama işlevleri (örn. ISNULL()
Üzerinde SUM()
) ifadelerine izin verilmez .
SQL Server fark ben yardım etmenin bir yolu var mı
balance_amount
vetransaction_count
vardırNOT NULL
sıfat daha?Değilse, bu sütunların yanlışlıkla
NULL
-able olarak tanımlanmasından endişe etmem gerekir mi?Düşünebileceğim iki endişe:
- Dengeler görünümüyle eşlenen uygulama nesneleri, dengenin yanlış tanımını alıyor.
- Çok sınırlı durumlarda, belirli iki optimizasyon Query Optimizer tarafından kullanılamaz, çünkü bu iki sütunun olduğu konusunda bir garantisi yoktur
NOT NULL
.
Bu endişelerden herhangi biri önemli midir? Aklımda tutmam gereken başka endişeler var mı?