Eu tenho a seguinte exibição indexada definida no SQL Server 2008 (você pode baixar um esquema funcional da gist para fins de teste):
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
e transaction_amount
são todos definidos como NOT NULL
colunas em dbo.transactions
. No entanto, quando olho para a definição de exibição no Pesquisador de Objetos do Management Studio, ela marca as colunas como balance_amount
e -able na exibição.transaction_count
NULL
Examinei várias discussões, sendo esta a mais relevante, que sugerem que algumas funções aleatórias podem ajudar o SQL Server a reconhecer que uma coluna de exibição é sempre NOT NULL
. No entanto, não é possível embaralhar esse tipo, pois expressões em funções agregadas (por exemplo, um ISNULL()
over the SUM()
) não são permitidas em visualizações indexadas.
Existe alguma maneira eu posso ajudar SQL Server reconhecer que
balance_amount
etransaction_count
sãoNOT NULL
-able?Caso contrário, devo ter alguma preocupação sobre o fato de essas colunas serem identificadas por engano como
NULL
-able?As duas preocupações em que consigo pensar são:
- Quaisquer objetos de aplicativo mapeados para a exibição de saldos estão recebendo uma definição incorreta de um saldo.
- Em casos muito limitados, certas otimizações não estão disponíveis para o Query Optimizer, pois não há garantia da exibição de que essas duas colunas estão
NOT NULL
.
Alguma dessas preocupações é um grande negócio? Há outras preocupações que devo ter em mente?