Sql 什么时候应该使用数据库同义词?
我已经记下了语法,但我想知道是否有人能提供一个说明性的用例,其中数据库同义词非常有用。比如,当您需要编写一个写得不好的应用程序(它不会发出Sql 什么时候应该使用数据库同义词?,sql,oracle,database-design,plsql,synonym,Sql,Oracle,Database Design,Plsql,Synonym,我已经记下了语法,但我想知道是否有人能提供一个说明性的用例,其中数据库同义词非常有用。比如,当您需要编写一个写得不好的应用程序(它不会发出ALTER SESSION SET CURRENT_SCHEMA)来针对另一个模式工作时 同义词主要用于解决类似情况。使用正确编写的应用程序,您几乎不必使用它们。当您在现有代码中硬编码数据库对象名称时 使用同义词可以省去重写旧代码(有时来自多个源代码)的痛苦,因为这些代码对表或数据库名称有自己的想法 例如,我看到了为某个生产服务器编写的代码。编码器方便地硬编码
ALTER SESSION SET CURRENT_SCHEMA
)来针对另一个模式工作时
同义词主要用于解决类似情况。使用正确编写的应用程序,您几乎不必使用它们。当您在现有代码中硬编码数据库对象名称时 使用同义词可以省去重写旧代码(有时来自多个源代码)的痛苦,因为这些代码对表或数据库名称有自己的想法
例如,我看到了为某个生产服务器编写的代码。编码器方便地硬编码了主表的名称为
test\u data
,这在他的工作站上运行良好。使用同义词而不是重写他的代码让我很早就明白了。当DBA希望将数据库对象分离到不同的模式中,但希望/需要其中一些对象对其他模式可见(但不希望直接访问它们)时,我通常会使用同义词
我最近看到的一个例子是:同一家公司运行的多个web应用程序。用户通常可以访问其中的多个应用程序,并且只有一个用户帐户可以访问这些应用程序。用户帐户信息存储在
User\u ACCOUNTS
模式中,所有其他应用程序都在其自己的模式中,并通过同义词访问User\u ACCOUNTS
模式。它非常适合在测试时暂存模拟表。例如,如果源表包含数百万条记录,并且您希望测试一小部分数据,则可以使用同义词将源表重新定向到您控制的较小表,以便可以进行各种场景
通过这种方式,您可以在不影响源表的情况下更新/删除模拟表中的数据。当您准备好使用源表时,只需重新定向同义词。请查看
除了这里的其他答案外,它们还常用于:
- 为远程表(即通过数据库链接)提供易于使用的名称
- 所有用户都需要访问的表,即公共同义词
通过重新定义同义词,它还可以用于在两个具有相同结构的模式之间切换代码。Link:完全无用的功能:当然,公共同义词允许您在不需要架构的情况下引用对象。对象语法提高了PL/SQL和SQL代码的可读性。@Darren Atkinson:如果您决定合并数据库,公共同义词会增加名称合并的可能性。它们在包中有多大的用处,最近,我无法从我的应用程序访问包,即使存在execute grant。创建同义词后,我可以从应用程序访问包。我不同意同义词对于“正确编写”的应用程序是无用的。我一直在使用它们,以避免在应用程序中硬编码模式名称。例如,我可能有一个连接两个表的视图;如果需要将其中一个表移动到另一个模式,
ALTER SESSION SET CURRENT_schema
将不起作用。