在我的应用程序中,会有很多用户,超过 500 个。他们只处理一个模式对象。我已授予必要的权限。当我说:
SELECT * FROM EMP;
我收到“表或视图不存在”错误,这意味着:
- 我要么需要在对象之前指定所有者名称。像
SCOTT.EMP
,或 - 我可以为我将要引用的所有对象创建公共同义词。
我担心的是,公共同义词是否会对具有大约 300 个同时连接的这么多用户的性能产生影响。我应该选择第一种还是第二种方法?
公共同义词服务于一个非常特定的目的;它们使每个用户都可以引用一个对象-假设他们具有适当的权限。如果在未来的任何时候您可能想要更改特定用户查看对象的方式,那么公共同义词不是可行的方法。
它们还使用了整个数据库的特定对象名称。但是,存在公共同义词这一事实并不妨碍您创建具有相同名称的对象。这可能令人难以置信的混乱。
例如,假设您有一个过程test
和一个模式emp
。尝试执行emp.test
将不起作用,因为您已经emp
在桌子上拥有公共同义词。
在性能方面,他们似乎认为公共同义词优于私有同义词会导致性能略有下降。但是,使用同义词而不是不使用同义词也会导致性能略有下降。这表明,如果每一个最后的计算机都是宝贵的,那么您根本不应该使用同义词。
综上所述,我认为这意味着您应该尽可能避免使用公共同义词。如果您需要一个,那么当然要使用一个,毕竟它们的存在是有原因的,但是如果您不需要,那么拥有一个有什么意义呢?scott.emp
结构很清晰,可以准确地向您显示您正在引用的模式和对象,而不会被您自己或其他新接触数据库和代码的人误解。
快点。您没有明确地说出来,但您问题的措辞似乎表明您正在为每个用户创建一个模式。这似乎会造成很大的混乱......