뷰를 참조하는 뷰는 생성하지 말자
다른 뷰를 참조하는 뷰를 생성하는 것은 가능하다. 이것은 명령형 프로그래밍 언어에 있는 프로시저를 처리하는 방식으로 뷰를 사용하는 것인데, 이렇게 하면 큰 실수를 할 수 있고 성능과 관리적 문제점을 일으킨다. 이런 뷰는 사용 이점을 모두 갉아먹는 결과만 낳을 뿐이다. 코드 3-3은 다른 뷰를 참조하는 뷰를 생성하는 예제이다.
코드 3-3 세 가지 뷰 생성
CREATE VIEW vActiveCustomers AS
SELECT c.CustomerID, c.CustFirstName, c.CustLastName,
c.CustFirstName + ‘ ‘ + c.CustLastName AS CustFullName
FROM Customers AS c
WHERE EXISTS
(SELECT NULL
FROM Orders AS o
WHERE o.CustomerID = c.CustomerID
AND o.OrderDate > DATEADD(MONTH, -6, GETDATE()));
CREATE VIEW vCustomerStatistics AS
SELECT o.CustomerID, COUNT(o.OrderNumber) AS OrderCount,
SUM(o.OrderTotal) AS GrandOrderTotal,
MAX(o.OrderDate) AS LastOrderDate
FROM Orders AS o
GROUP BY o.CustomerID;
CREATE VIEW vActiveCustomerStatistics AS
SELECT a.CustomerID, a.CustFirstName, a.CustLastName,
s.LastOrderDate, s.GrandOrderTotal
FROM vActiveCustomers AS a
INNER JOIN vCustomerStatistics AS s
ON a.CustomerID = s.CustomerID;