同义词
同义词是给表、视图、序列或其他对象一个代替名称的对象。与这些对象关联的任何对象(如触发器或索引)仍关联该对象,而无论使用哪个名称引用该对象。
同义词的主要特点有:
-
代替名称:同义词提供一个数据库对象的代替名称,不会变更该对象的属性。
-
方便引用:可以使用同义词简化对象的引用,特别是对象名较长或有问题时。
-
不用修改对象名:在表名已广泛应用的情况下,如果需要改名,使用同义词可以避免大规模修改。
-
重命名:可以创建一个同义词,然后删除原始对象名,实现对象的重命名。
-
本地化:可以创建与国际标准相对应的同义词,用于本地化应用程序。
-
与对象关联:与同义词关联的对象(如触发器)仍然与基础对象关联。
-
公共同义词:可以使用PUBLIC创建的同义词,它不属于任何模式。
同义词的创建和管理主要包括:
-
创建同义词:使用CREATE SYNONYM语句创建同义词,指定对象名称和同义词名。
-
修改同义词:使用CREATE OR REPLACE SYNONYM重新创建同义词,或ALTER SYNONYM语句更改同义词的可解析名称。
-
删除同义词:使用DROP SYNONYM语句删除同义词。
-
查询同义词:使用数据字典视图USER_SYNONYMS、DBA_SYNONYMS或ALL_SYNONYMS查询同义词信息。
-
授权:授予其他用户使用同义词的权限,否则其不能解析同义词。
-
处理同义词解析:确保用户在执行DDL时拥有解析同义词的权限,否则语句会失败。
例如:
CREATE PUBLIC SYNONYM locations FOR demo.places;
CREATE SYNONYM emp FOR hr.employees;
DROP SYNONYM emp;
GRANT SELECT ON emp TO john;
REVOKE SELECT ON john.emp FROM mary;
SELECT * FROM john.emp; -- mary执行会报错,因为没有权限解析emp
同义词使数据库对象的引用更加灵活方便,它并不会真正更改或重命名对象,只是提供一个代替名称。理解同义词这一概念,可以更高效地使用对象,简化应用程序开发。
要熟练使用同义词,需要理解:
-
同义词与基础对象的关系,它并不会更改对象的任何属性。
-
同义词可以public或隶属于某模式,以及其作用域的影响。
-
与同义词关联的触发器或索引将作用于基础对象。
-
同义词的使用需要对象权限,否则无法解析同义词。
-
同义词可以简化应用程序开发,实现半透明的数据库对象重命名。
同义词看似简单,但其背后的概念还是需要在实践中不断理解和运用。只有在实践中大量使用同义词,体会其工作机制和作用,积累丰富的经验,才能熟练运用同义词,并在系统开发中充分发挥其作用。同义词作为一个很实用的数据库对象,是数据库设计人员和开发人员必备的一个技能。