SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

アイエニウェア・ソリューションズ ドキュメント翻訳(AD)

SQL Anywhere 11のクールな新機能トップ10

原文: Top 10 Cool New Features In SQL Anywhere 11

  • このエントリーをはてなブックマークに追加

3. 即時マテリアライズドビュー

 部署ごとの従業員リストの作成に使われるマテリアライズドビューの例を以下に示します。

CREATE MATERIALIZED VIEW DeptList AS
SELECT Departments.DepartmentID, 
Employees.EmployeeID, 
Departments.DepartmentName, 
Employees.GivenName,
Employees.Surname, 
Employees.Phone
FROM Departments
INNER JOIN Employees
ON Employees.DepartmentID = Departments.DepartmentID;

 マテリアライズドビューは、使用する前に必ず初期化する必要があります。

REFRESH MATERIALIZED VIEW DeptList;

 通常の(手動の)マテリアライズドビューでは、ベーステーブルを変更しても、その後でREFRESHを実行しなければ、古いデータが表示されます。

UPDATE Employees SET DepartmentID = 400 WHERE EmployeeID = 1336;
SELECT * 
FROM DeptList
ORDER BY DepartmentName, 
Surname,
GivenName;
DepartmentID  EmployeeID  DepartmentName  GivenName  Surname  Phone
============  ==========  ==============  =========  =======  ==========
300           1336        Finance         Janet      Bigelow  6175551493 

 SQL Anywhere 11からは、ベーステーブルに対して行ったすべての更新がマテリアライズドビュー内のデータに直ちに適用されるようにビューを変更することができます。これを行うための手順を以下に示します。

TRUNCATE TABLE DeptList;
CREATE UNIQUE INDEX xid ON DeptList ( 
DepartmentID, 
EmployeeID );

ALTER MATERIALIZED VIEW DeptList IMMEDIATE REFRESH;
REFRESH MATERIALIZED VIEW DeptList;

 手動のビューに既にデータが挿入されている場合は、TRUNCATE TABLEが必要です。ビューを即時ビューに変更するには、ビューを空にする必要があります。CREATE UNIQUE INDEXも即時ビューの要件です。SQL Anywhereがローを更新するときに、目的のローを見つけ出せるようにしなければならないからです。上記のALTER文では、ビューのリフレッシュモードをIMMEDIATEに変更しています。また、最初にデータをビューに挿入するためにREFRESHが1回必要です。確かにステップ数は多くなりますが、1回だけ実行すれば済みます。

 ベーステーブルを更新してからビューをクエリすると、明示的なREFRESHを新たに実行しなくても、新しいデータが直ちに表示されます。

UPDATE Employees SET DepartmentID = 400 WHERE EmployeeID = 1336;
SELECT * 
FROM DeptList
ORDER BY DepartmentName, 
Surname,
GivenName;
DepartmentID  EmployeeID  DepartmentName  GivenName  Surname  Phone
============  ==========  ==============  =========  =======  ==========
400           1336        Marketing       Janet      Bigelow  6175551493 

 マテリアライズドビューがクールである本当の理由は、そのビューが存在するかどうかわからなくても利用できることです。次のクエリではベーステーブルを使用していますが、図2は、SQL Anywhereがベーステーブルの代わりにDeptListビューを使用したことを示しています。

SELECT Departments.DepartmentName, 
Employees.GivenName,
Employees.Surname, 
Employees.Phone
FROM Departments
INNER JOIN Employees
ON Employees.DepartmentID = Departments.DepartmentID;
図2 マテリアライズドビューが自動的に使用される
図2 マテリアライズドビューが自動的に使用される

次のページ
4. 下位互換性が復活

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
アイエニウェア・ソリューションズ ドキュメント翻訳連載記事一覧

もっと読む

この記事の著者

Breck Carter(Breck Carter)

RisingRoad Professional Servicesの主幹コンサルタント。SQL Anywhereデータベースと、Oracle、SQL Server、SQL AnywhereとMobiLinkとの同期に関するコンサルティングとサポートを得意とする。SQL Anywhereブログの著者でもある。連絡先はbreck.carter@gmail.com。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5475 2010/11/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング