使用同义词与视图有什么优缺点?

Jam*_*mey 36 sql database database-design

这是一个通用的数据库设计问题 - 在简单的视图中,在数据库开发中使用同义词有什么好处?在两者之间进行选择时要记住哪些主要考虑因素?

示例视图:

CREATE VIEW Users AS
SELECT * FROM IdentitySystem.dbo.Users
Run Code Online (Sandbox Code Playgroud)

和同等的同义词:

CREATE SYNONYM Users 
FOR IdentitySystem.dbo.LCTs
Run Code Online (Sandbox Code Playgroud)

Con*_*lls 39

他们是不同的东西.同义词是对象的别名,视图是一个或多个表的构造.

使用视图的一些原因:

  • 可能需要过滤,连接或以其他方式结构化结果集的结构和语义

  • 可能需要为已更改但具有您不想重新工作的依赖项的底层结构提供遗留支持.

  • 可以提供安全性,其中表的某些内容应该对一类用户可见,但不是全部.这可能涉及删除包含敏感信息的列或过滤掉记录的子集.

  • 可能希望以用户可访问的形式封装某些业务逻辑以用于报告目的.

  • 您可能希望统一来自多个来源的数据.

......还有更多.

使用同义词的原因:

  • 您可能希望在另一个数据库中为一个对象添加别名,在该数据库中您不能(或不希望)硬编码对特定数据库的引用.

  • 您可能希望重定向到随时间变化的源,例如存档表.

  • 您希望以不影响查询优化器的方式对某些内容进行别名.

......还有更多.


spe*_*593 6

有很多考虑因素.简而言之,使用最适合每种情况的工具.

有了这个观点,我可以

  • 隐藏列
  • 添加谓词(WHERE子句)以限制行
  • 重命名列
  • 为SQL表达式提供列名

有了同义词,我可以:

  • 在不限定名称的情况下引用其他模式和数据库中的对象

同义词可能有更多可以完成的事情.在我们(Oracle数据库)应用程序的设计中,我们对所有数据库对象(表,视图,触发器等)使用"所有者"模式(用户),并且我们将这些对象的权限授予其他"app"用户.在每个"app"用户模式中,我们创建同义词以引用"所有者"对象.

HTH