Tôi có chế độ xem được lập chỉ mục sau được xác định trong SQL Server 2008 (bạn có thể tải xuống một lược đồ làm việc từ ý chính cho mục đích thử nghiệm):
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
và transaction_amount
tất cả được định nghĩa là NOT NULL
các cột trong dbo.transactions
. Tuy nhiên, khi tôi nhìn vào định nghĩa khung nhìn trong Object Management Studio Explorer, nhãn hiệu cả nó balance_amount
và transaction_count
như NULL
cột -able trong giao diện.
Tôi đã xem qua một số cuộc thảo luận, cuộc thảo luận này có liên quan nhất trong số đó, cho thấy một số chức năng xáo trộn có thể giúp SQL Server nhận ra rằng một cột xem luôn luôn NOT NULL
. Tuy nhiên, không có sự xáo trộn nào như vậy trong trường hợp của tôi, vì các biểu thức trên các hàm tổng hợp (ví dụ: ISNULL()
trên SUM()
) không được phép trong các khung nhìn được lập chỉ mục.
Có cách nào tôi có thể giúp SQL Server nhận ra điều đó
balance_amount
vàtransaction_count
có thể thực hiện đượcNOT NULL
không?Nếu không, tôi có nên lo lắng về việc các cột này bị xác định nhầm là
NULL
không thể?Hai mối quan tâm tôi có thể nghĩ đến là:
- Bất kỳ đối tượng ứng dụng nào được ánh xạ tới chế độ xem số dư đều nhận được định nghĩa không chính xác về số dư.
- Trong các trường hợp rất hạn chế, một số tối ưu hóa nhất định không có sẵn cho Trình tối ưu hóa truy vấn vì nó không có sự đảm bảo từ quan điểm rằng hai cột này
NOT NULL
.
Là một trong những mối quan tâm này là một vấn đề lớn? Có bất kỳ mối quan tâm nào khác tôi nên ghi nhớ?