应该何时使用数据库同义词?

时间:2010-03-02 16:34:56

标签: sql oracle database-design plsql synonym

我已经解决了语法问题,但我想知道是否有人可以提供一个说明性的用例,其中数据库同义词非常有用。

6 个答案:

答案 0 :(得分:18)

在测试时非常适合暂存模拟表。例如,如果源表包含数百万条记录,并且您希望测试一小部分数据,则可以使用同义词将源表重定向到您控制的较小表,以便您可以进行各种场景。

通过这种方式,您可以更新/删除模拟表中的数据,而不会影响源表。当您准备使用源表时,您需要做的就是重新定义同义词。

答案 1 :(得分:10)

查看Oracle documentation on synonyms

除了这里的其他答案,它们也常用于:

  • 为远程表提供易于使用的名称,即通过数据库链接
  • 您需要所有用户都可以访问的表,即公共同义词

答案 2 :(得分:6)

我经常看到当DBA希望将数据库对象分成不同的模式时使用的同义词,但是希望/需要其他模式中的某些对象可见(但不希望直接访问它们)。

我最近见过的一个例子:同一家公司运营的几个网络应用程序。用户通常可以访问多个这些应用程序,并且只有一个用户帐户才能访问这些应用程序。用户帐户信息存储在USER_ACCOUNTS架构中,所有其他应用程序都在自己的架构中,并通过同义词访问USER_ACCOUNTS架构。

答案 3 :(得分:2)

当您在现有代码中硬编码数据库对象名称时。

使用同义词可能会让您免于重写旧代码的痛苦,有时来自多个来源,这些来源对表或数据库名称有自己的想法。

例如,我看到过为某些生产服务器编写的代码。编码器方便地对主表的名称test_data进行了硬编码,这在他的工作站上运行良好。使用同义词而不是重写他的代码让我早早回家。

答案 4 :(得分:1)

说,当你需要编写一个写得不好的应用程序(不会发出ALTER SESSION SET CURRENT_SCHEMA)来处理另一个模式时。

同义词主要用作此类案例的解决方法。使用正确编写的应用程序,您几乎不必使用它们。

答案 5 :(得分:1)

通常,在SQL或PL * SQL中嵌入模式名称是不好的做法。因此,如果您正在编写一些必须引用另一个模式中的表的代码,例如:“从OtherSchema.OtherTable中选择id”,最好定义表的同义词(为OtherSchema.OtherTable创建同义词OtherTable)并编写“select id”来自OtherTable“。

这样,如果OtherTable移动到另一个模式名称,或者您有另一个使用不同模式名称的系统安装,则可以重新定义同义词而不是更改代码。

通过重新定义同义词,它还可以用于在具有相同结构的两个模式之间切换代码。

相关问题