ฉันมีมุมมองการจัดทำดัชนีต่อไปนี้กำหนดไว้ใน SQL Server 2008 (คุณสามารถดาวน์โหลด schema การทำงานจากส่วนสำคัญสำหรับการทดสอบ):
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
อย่างไรก็ตามเมื่อฉันดูคำจำกัดความของมุมมองใน Object Explorer ของ Management Studio มันจะทำเครื่องหมายคอลัมน์ทั้งสองbalance_amount
และtransaction_count
เป็นNULL
-able ในมุมมอง
ฉันเอาดูที่การอภิปรายหลาย, คนนี้เป็นที่เกี่ยวข้องมากที่สุดของพวกเขาที่แนะนำสับของฟังก์ชั่นบางอย่างอาจช่วย SQL Server NOT NULL
ยอมรับว่าคอลัมน์มุมมองอยู่เสมอ ในกรณีของฉันไม่สามารถสับแบบนี้ได้เนื่องจากไม่อนุญาตให้มีการแสดงออกในฟังก์ชั่นรวม (เช่นISNULL()
over the SUM()
) ในมุมมองที่จัดทำดัชนี
มีวิธีที่ฉันสามารถช่วย SQL Server ตระหนักดีว่า
balance_amount
และtransaction_count
มีความNOT NULL
น่า?หากไม่มีฉันควรมีข้อกังวลใด ๆ เกี่ยวกับคอลัมน์เหล่านี้ที่ถูกระบุว่าผิด
NULL
- ใช้ได้หรือไม่สองข้อกังวลที่ฉันคิดได้คือ:
- แอปพลิเคชันวัตถุใด ๆ ที่แมปกับมุมมองยอดดุลจะได้รับการกำหนดที่ไม่ถูกต้องของยอดดุล
- ในกรณีที่มีข้อ จำกัด อย่างมากการปรับให้เหมาะสมบางอย่างจะไม่สามารถใช้ได้กับ Query Optimizer เนื่องจากไม่มีการรับประกันจากมุมมองที่เป็นสองคอลัมน์
NOT NULL
นี้
สิ่งเหล่านี้เกี่ยวข้องกับเรื่องใหญ่หรือไม่? มีข้อกังวลอื่น ๆ ที่ฉันควรทราบหรือไม่