关系型数据库中的视图是由保存的 SQL 查询创建的虚拟表。与物理表不同,视图本身不存储数据,而是在每次访问时动态地从一个或多个底层表中检索并呈现数据。视图充当预定义的过滤器或转换,允许用户与数据子集或数据的组合表示进行交互,而无需修改原始表。例如,一个视图可以结合 customers
表和 orders
表的列,以显示客户姓名及其最近的购买记录,同时保持源表不变。
视图主要用于简化复杂查询、增强安全性和抽象底层模式细节。例如,开发者可以创建一个名为 active_users
的视图,该视图过滤 users
表,仅包含 last_login
在过去 30 天内的行。这使得其他开发者无需重复编写过滤逻辑即可查询 active_users
。视图还通过限制对敏感列的访问来增强安全性。数据库管理员可以创建一个视图,该视图仅暴露 products
表中的非敏感字段(例如 product_name
和 price
),同时隐藏内部详细信息,如 cost_price
或 supplier_id
。这确保用户仅与授权可见的数据进行交互。
然而,视图也有局限性。由于每次访问视图时都会执行其底层查询,包含连接(joins)或聚合(aggregations)的复杂视图可能会影响性能。例如,一个通过连接 orders
、customers
和 locations
表来计算每个区域总销售额的视图,如果这些表变得很大,可能会导致速度变慢。此外,并非所有视图都可更新——这取决于数据库系统和视图的结构。聚合数据的视图(例如 monthly_sales
)通常无法直接修改,因为数据库无法将更改映射回源表。开发者应审慎使用视图,权衡便利性、性能和可维护性。