Oracleのシノニム(synonym)とは

Oracleのシノニム(synonym)

Oracleの「シノニム」(synonym)とはいわゆる別名のことです。

例えばテーブル「emp03」テーブルに別名をつけたい場合、以下のSQLで別名として定義できます。

これで「emp03」にアクセスする場合、「tokyo_emp」と表記しても「emp03」へアクセスできるようになりました。

わかりやすい名前に変換するシノニム

このシノニムはどういったときに使うか?をみていきます。

まず、下記のようなテーブルが4つあったとします。

  1. empテーブル・・・元の従業員のテーブル
  2. emp01テーブル・・・全従業員が存在する
  3. emp02テーブル・・・役職者だけが存在する
  4. emp03テーブル・・・東京営業所の人が存在する

例えば、このようなちょっと変な設計にでくわした場合があったとします。

テーブル名に「01」や「02」がついています。これではわかりにくいですよね?数値連番は作成者だけが理解できる命名規則なのでよくはありません。

テーブル名を変更してしまえばいいのですが、それによるシステムへの影響を考えるとできればそのままにしておきたい所です。

テーブル名を変更できないときに、シノニムで別名を振ってしまえばわかりやすい名称に変更できるわけです。しかも元のテーブル名は変更されません。

自分が設計したデータベースならempテーブルがこのような意味不明な設計にならないとは思いますが、もともとこのような設計のDBを使用しないといけないケースでは使えます。

例えば、このようにシノニムをつけます。

  1. 「emp01」テーブル → 「all_emp」シノニム
  2. 「emp02」テーブル → 「manage_emp」シノニム
  3. 「emp03」テーブル →   「tokyo_emp」シノニム

このようにわかりやすい名前に変換しておくと、意味がわかりますよね?数値にしておくよりはましです。

シノニムは例えばこんな使い方があります。



一時的にシノニムで名前を記述しておく

他の使い道ですが、例えばテーブル名を後から変更することがわかっているケースで使えます。

現時点ではテーブル名が確定しておらず、後からシステム変更により別の名前に変えることが確定している場合。

まれにこんなケースにも出くわします。この場合、プログラム側で仮のテーブル名で記述してしまうと後からテーブル名を変更するのはとても大変です。

なのでプログラム側ではテーブル名を記述する際に、テーブル名ではなくシノニムを記述しておきます。

そうすれば、後日テーブルが変更されてもプログラムを変更せずに、シノニムの変更だけでいけるわけです。

手間がかからない。シノニム使い方、わかってきましたか?

PUBLICシノニム

シノニムにはもう一つ、パブリックシノニムがあります。

シノニムは通常同一ユーザでしか使えませんが、別のユーザーでも使いまわしたい場合にパブリックシノニムを使います。

これで「tblABC」にアクセスする場合、「tblA」と表記しても「tblABC」へアクセスできるようになりました。SQLは通常のシノニムの前にPUBLICをつけるだけです。

このようにシノニムは通常ではそれほど使用頻度が多いわけではありませんが、いざという時に非常に役に立つ機能です。

参照:シノニムの作成および管理

以上、Oracleのシノニム(synonym)でした。