導入
前のレッスンで見たように、大きな DB では sales.orders のように「スキーマ名.テーブル名」で指定します。しかし毎回この長い名前を書くのは面倒ですし、参照先を後から変えたくなることもあります。そこで、テーブルなどのオブジェクトに短い別名を付けておける仕組みが シノニム(Synonym) です。主に Oracle で使われる機能です。
説明
シノニム(synonym=同義語)は、あるオブジェクトを指す「あだ名」です。Oracle では CREATE SYNONYM 注文 FOR sales.orders; のように作り、以後は SELECT * FROM 注文; と短く呼べます。利点は「呼ぶ側と、実体の場所を切り離せる」こと。呼び出し側はいつも別名を見ていて、その裏で本体を差し替えられます。
flowchart LR App["アプリ・利用者"] -->|"SELECT * FROM 注文"| Syn["シノニム 注文"] Syn -.今は.-> Old["sales.orders_2025"] Syn -.差し替え後.-> New["sales.orders_2026"] Note["呼ぶ側のSQLは変えずに<br/>参照先だけ入れ替えられる"]
「年が替わってテーブルを orders_2026 に切り替えたい」というとき、シノニム 注文 の向き先を変えるだけで、アプリ側の SELECT * FROM 注文; は一切変えずに済みます。この「間接的に指す」性質が、大規模運用で効いてきます。
SQLite にはシノニムはありません。 いちばん近い代わりが、レッスン26 のビューです。CREATE VIEW 別名 AS SELECT * FROM 元テーブル; とすれば、「元テーブルを指す別名」として使えます。仕組みは違いますが、「短い名前で本体を呼ぶ」という目的は同じように果たせます。
CREATE VIEW 顧客 AS SELECT * FROM users;
SELECT * FROM 顧客;
やってみよう
初期表示の CREATE VIEW 顧客 AS SELECT * FROM users; を実行し、続けて SELECT * FROM 顧客; を実行してください。users と同じ中身が「顧客」という別名で取り出せます。これが、SQLite でシノニムに一番近い使い方です。Oracle ではこれを CREATE SYNONYM で、より軽量に(SELECT を挟まず)実現している、とイメージしてください。
演習
products テーブルを指す別名 商品一覧 を、ビューを使って作ってください。
ヒント1を見る
CREATE VIEW 商品一覧 AS SELECT * FROM products; の形です。
ヒント2を見る
CREATE VIEW 商品一覧 AS SELECT * FROM products;(作成後 SELECT * FROM 商品一覧; で確認)