SQL Server 2000까지는 없던 내용이라 SQL Server 사용자는 생소할 만한 object에 대해 간단히 소개해 볼까 합니다.

SYNONYM : 동의어, 유의어

아직 제대로 번역된 글을 보지 못해 한글로는 어떻게 표현해야 할지 궁금하지만... 유사객체(?)ㅋㅋ (인포믹스에서는 동의어라고 하나보네요. - 출처)
뜻만으로 미뤄 짐작해보면 alias(별칭)과 유사한 그런 개념입니다.
엔진 차원에서 이렇게 만들어진 object를 어떻게 관리하는지를 정확히는 모르는 관계로 deep한 내용은 건너뛰고...

일단 MSDN 문서에서 CREATE SYNONYM에 대한 도움말 링크는 여기

문법은 간략히 설명하자면
CREATE SYNONYM name FOR objectName
object에 올 수 있는 것은 도움말을 참조하시고... 대략 stored procedure류, view, table 등이 올 수 있습니다.

유의할 점은... 생성시 대상이 되는 object가 존재하지 않아도 된답니다. 실행 시 object의 여부를 check한다고 하네요.

SYNONYM은 local, remote object 모두에 만들 수 있습니다.

그럼 이런 넘은 어디에 쓰라고 만들었을까?? 함 고민해 봤는데..
처음엔 원격 DB table에 check constraint(관계설정)을 걸 수 있을 줄 알았는데, 여기를 보니 그건 안된다고 나와있네요 --;; 해보진 않아서 아는 사람한테 해 보라고 부탁만 해 놨지만..



그럼 도대체 어디에 쓸까???
함 생각해봤는데...

이미 구축된 database를 물리적으로 여러대로 분산할 때, program source를 전혀 고치지 않고 분리가 가능할거 같더라구요. 분리된 database object에 대해 실제 program에 사용되는 database object name과 동일한 synonym만 만들어 주면 되니까요.

또 뭐가 있을까???
생각나는게 없네요 --;; 오라클에는 원래 있었던 기능이라니 혹시 또 다른 좋은 쓰임새를 아시는 분은 덧글 부탁드립니다.  

(추가) Synonym의 쓰임새
SQL Server 2005 adds the capability to create synonyms for database objects, which simplifies the readability of the queries that use objects outside of their own schema (that is, objects with multipart names). Synonyms can also be used to create a level of abstraction over their base objects, thus enabling the easy switching of base objects without affecting the code that references them.
(출처 : http://www.informit.com/articles/article.asp?p=364263&seqNum=3&rl=1)

1. 가독성을 높혀준다.
2. 쉽게 실제 object를 교체 가능하므로 해당 object를 참조하는 코드에 영향을 주지 않는다.
라는 이점이 있다네요.


(추가2) 글 쓰고나니 계속 더 찾아지는 article들...
이 기사에서는 'Synonyms as an Abstraction Layer'라고 표현하는데.. 아주 적절한 표현인 것 같네요.

+ Recent posts