创建同义词表
同义词详解(原创)
问题:同义词是什么,它有什么作用?
回答:
同义词也是Oracle数据库特有的对象之一。与表一样,同义词创建以后,就会永久地保存在数据库中。
同义词的主要作用就是给一个数据库对象(表、视图……)一个别名,可以是给某个表取一个更容易理解的别名,也可以是为了简化原有别名。
注意,select语句中的“表别名”只在该语句运行时有效,而同义词所创建的别名是一个独立存在的对象。
问题:如何使用同义词。
回答:
先为某个对象创建一个同义词,然后就可以通过这个同义词访问原始对象了。
语法:create or replace synonym 视图名 for 对象名。
代码示例:为员工表emp创建一个同义词worker。
create or replace synonym worker for emp;
问题:如何删除同义词,删除同义词时所对应的原始对象是否也删除了?
回答:
删除的方法是:drop synonym 同义词名称。
同义词很象是windows中的一个“快捷方式”,快捷方式删除了,原文件仍然是存在的。所以同义词删除了,原有对象不变。
案例一:使用同义词简化比较的名称
在开发中,经常给数据库链接名称一个别名,因为这个链接名非常长。
如:
select * from scott.emp@server (用户名.表名@链接名)
为scott.emp@server创建同义词
create or replace synonym worker for scott.emp@server;
现在就可以执行:
select * from worker;
对于初学者,是比较难体会;因为这种情况通常在“分布式”的环境中才有。
了解:什么是分布式?
分布式,就是指有多个服务器(通常是数据库数据库)同时服务。如果一个服务器出了问题,其它服务器可以继续服务,但是客户端并不知道。如果只有一个数据库服务器,就叫做“集中式”。
案例二:如果在开发后期表名可能会改变,如果数据库采用Oracle,你有什么好的方法来减少sql代码的修改,即增加维护性,?
回答:
通常我们会直接使用表名来完成增删改查。以emp表为例如:
insert into emp values(?,?,...)
delete from emp where empno?;
select * from emp;
....
如果表名在后期必须改为emp2,则上面的所有sql语句都必须修改。如果sql语句出现了多个文件或者是多个应用中,则改动量会非常大,甚至是不可行。
解决方法:为新表名emp2创建同义词,同义词名称用emp。这样所有sql语句都不需要改变。
create or replace synonym emp for emp2;
体会:
巧妙使用同义词,在表名改变以后,所有sql语句仍然不需要改变。
说明:
但是在实际开发中,这样的用法并不多,大家主要还是习惯了直接访问表名。因为大多数程序员对Oracle了解并不深。以“80 20”原则来看,只用了Oracle最常见的20%的功能
,这样就可以完成开发80%的任务;但是项目受阻,通常因为剩下的20%的任务,这部分通常比较难,所以需要程序员学习更多的知识。