sql - 视图可用于提供向后兼容的接口
问题描述
视图可用于提供向后兼容的接口来模拟曾经存在但其架构已更改的表。
这是什么意思,有人能解释一下吗?
是说,当用于创建视图的表架构发生变化时,不会改变视图吗?
解决方案
使用数据库的一大问题是随着时间的推移处理变化。问题是下游用户依赖于他们使用的数据模型。
您可以通过让下游用户依赖视图而不是直接访问基表来隔离下游用户。
例如,您可能从一个表开始,该表包含一个带有address
列的用户表。下游的人们以如下方式访问该表:
select u.*
from users u;
后来,您意识到地址可以更改,并且您希望为地址实现一个类型 2 表——即,一个单独的表,每条记录都有一个生效日期和结束日期。好吧,现有的代码会中断。
相反,如果下游用户正在使用:
select u.*
from v_users u;
然后视图只需要从:
create view v_users as
select u.user_id, u.address
from users u;
至:
create view v_users as
select u.user_id
from users u join
user_addresses ua
on ua.user_id = u.user_id and
current_timestamp >= ua.eff_ts and
(current_timestamp < ua.end_ts or ua.end_ts is null);
瞧!下游没有任何中断。
推荐阅读
- regex - Woocommerce 永久链接 substr 替换
- excel - 使用 Target.Address 引用范围
- python - 交换唯一值时如何避免唯一性约束上的 SQLAlchemy IntegrityError
- c# - MongoDB LINQ 包含任何不支持的过滤器
- ios - 如何预构建 React Native pod,或者,有没有办法在 Podfile 中使用远程 React Native pod?
- regex - 正则表达式延迟匹配
- erlang - Elixir CRC 无法在 MAC 操作系统上编译
- c# - 如何在我的 xamarin.forms 应用程序中使用 FluentValidaiton 将错误消息分配给良好的文本标签
- java - 在 JButton 单击和调用逻辑上打开新的 JPane 未按预期工作
- ffmpeg - ffmpeg filter_complex concat 永远不会完成