Oracleのシノニム(synonym)とは

Oracleのシノニム(synonym)

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

シノニムのSQL

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

-- emp1テーブルに対してシノニムtokyo_empを作成する
CREATE SYNONYM tokyo_emp FOR emp1;

テーブル「emp1」テーブルのシノニム「tokyo_emp」を作りました。これで「emp1」にアクセスする場合、「tokyo_emp」と表記しても「emp1」へアクセスできるようになりました。

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

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

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

  1. empテーブル・・・元の従業員のテーブル
  2. emp1テーブル・・・東京営業所の人が存在する
  3. emp2テーブル・・・大阪営業所の人が存在する
  4. emp3テーブル・・・名古屋営業所の人が存在する

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

テーブル名に「1」や「2」がついています。これではわかりにくいですよね?数値連番は作成者だけが理解できる命名規則なのでよくはありません。テーブル名を変更してしまえばいいのですが、それによるシステムへの影響を考えると、できればそのままにしておきたい所です。

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

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

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

  1. 「emp1」テーブル → 「tokyo_emp」シノニム
  2. 「emp2」テーブル → 「osaka_emp」シノニム
  3. 「emp3」テーブル →   「nagoya_emp」シノニム

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

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

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

シノニムの他の使い道ですが、例えば、「テーブル名が確定していないケース」で使えます。

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

なので、プログラム側ではテーブル名を記述する際にテーブル名ではなくシノニムを記述しておきます。そうすれば、後日テーブル名が確定して名前が変わっても、プログラムは変更なしで、シノニムを変更するだけで済みます。

このようにシノニムを使えば手間がかからない。シノニム使い方、わかってきましたか?

PUBLICシノニム

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

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

-- パブリックシノニム allempを作成する
CREATE PUBLIC SYNONYM allemp FOR emp;

これで「emp」にアクセスする場合、「allemp 」と表記しても「emp」へアクセスできるようになりました。このシノニムは別のユーザーでも使えます。

SQLは通常のシノニムの前に「PUBLIC」をつけるだけです。

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

Oracleヘルプhttps://docs.oracle.com/cd/E57425_01/121/SQLRF/statements_7001.htm

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

コメント