代码之家  ›  专栏  ›  技术社区  ›  jamz

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

  •  39
  • jamz  · 技术社区  · 17 年前

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

    一个例子 视图

    CREATE VIEW Users AS
    SELECT * FROM IdentitySystem.dbo.Users
    

    以及等效的同义词:

    CREATE SYNONYM Users 
    FOR IdentitySystem.dbo.LCTs
    
    8 回复  |  直到 13 年前
        1
  •  38
  •   ConcernedOfTunbridgeWells    17 年前

    它们是不同的东西。同义词是对象的直接别名,视图是一个或多个表上的构造。

    使用视图的一些原因:

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

    • 可能希望将一些业务逻辑封装在用户可访问的表单中,以便进行报告。

    • 您可能希望在另一个数据库中别名一个对象,在那里您不能(或不想)对特定数据库的引用进行硬编码。

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

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

    …还有更多。

        2
  •  6
  •   spencer7593    17 年前

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

    有了观点,我可以

    • 添加谓词(WHERE子句)以限制行

    有了同义词,我可以:

        3
  •  3
  •   Krishna Chaitanya    17 年前

    视图主要是一个简单/复杂的“选择”语句。从本质上讲,您将视图用作掩码,并仅显示有用的列值。您使用视图的目的是不向最终用户显示额外信息。

    • 表名中带点的名称,如(user.tab_name可以替换为somesynonym_name)
    • 您不想与他人共享实际对象,
        4
  •  3
  •   Josh    13 年前

        5
  •  3
  •   Jimmy Zimms    12 年前

    视图中的柱投影在创建时建立。因此,如果将列添加到基础视图中,则只有在更改视图后才会显示该列。同义词则不然。将其视为tsql中的一个简单名称替换,通常是为了隐藏复杂性。

        6
  •  1
  •   Arthur    15 年前

    如果我错了,请纠正我,但我认为我看到了同义词的另一种用法(至少在Progress OpenEdge中),我在任何地方都没有看到记录,这可以使它比视图更安全。DML SELECT语句语法允许您使用表、视图或同义词,但INSERT、UPDATE和DELETE语句只允许使用表或视图。如果某些视图满足某些条件,则可以提供对数据的可更新、可插入和可删除访问。同义词似乎是一种提供对数据的只读访问的好方法,而不必在授予(或拒绝)视图特权方面一团糟。

        7
  •  1
  •   Mathese F    11 年前

    当您使用Sql server作为数据库服务器,SAS作为客户端时。如果您使用同义词,它将无法在SAS库中识别。我必须创建一个视图。

    它没有优化,但至少Windows sas和Sql server也不是最好的:)