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_idve transaction_amountiçindeki tüm NOT NULLsü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_amountve transaction_countsıra NULLgö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_amountvetransaction_countvardırNOT NULLsı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ı?
