数据库可以分三个层次
- Physical:就是储存在磁盘上的数据
- Conceptual:对磁盘上的数据抽象成我们定义的一个个 Relation
- Logical:进一步抽象,View
View 的存在能让一些查询变得更加简单自然,而且提供了一种对数据库操作进行模块化的方法
因此现实中的应用使用了大量的 View
view 只是逻辑上的概念,并不真实存在。对 view 进行查询操作,会根据 view 的定义从定义它的 relation(可能也是view)中进行操作(这是一个递归过程)
ps:感觉 view 更像程序语言中的变量用作对 query 的一部分进行命名
create view CSaccept AS
SELECT sID, cName
FROM Apply
WHERE major = 'CS' AND decision = 'Y';
SELECT Student.sID, sName, GPA
FROM Student, CSaccept
WHERE Student.sID = CSaccept.sID AND cName = 'Stanford' AND GPA < 3.8
-- 等效为如下查询
SELECT Student.sID, sName, GPA
FROM Student, Apply
WHERE major = 'CS' AND decision = 'Y' AND
Student.sID = Apply.sID AND cName = 'Stanford' AND GPA < 3.8
-- 可以根据 view 创建 view
create view CSberk AS
SELECT Student.sID, sName, GPA
FROM Student, CSaccept
WHERE Student.sID = Csaccept.sID AND cName = 'Berkeley'
-- 更加体现了 view 的好处
create view Mega AS
SELECT College.cName, state, enrollment, Student.sID,
sName, GPA, sizeHS, major, decision
FROM College, Student, Apply
WHERE College.cName = Apply.cName AND Student.sID = Apply.sID
Modify View
待补充