その入り口であるBronze資格の取得は難しくない。});前回に引き続き、オブジェクトの作成と管理について解説します。前回「SQLで表のデータを制限する」で、表と制約の作成を紹介しました。今回は索引、ビューなどの作成について学びましょう。索引、ビュー、シノニムなどのオブジェクトの使用方法2.索引の作成ページ数の多い本などで何かを調べる場合、索引を使用してその項目が掲載されているページを確認してから、実際のページを開くと思います。データベースもそれと同じで、列値を使用して表の行に対するポインタを別領域に保存します。行にアクセスするときは、まず索引からポインタを取得してから、実際の行にアクセスを行います。大規模な表から少ない行を頻繁に取得する場合は索引が役立ちます。行が更新されると索引も自動的に更新されるため、負荷がかかります。そのため、更新が頻繁に行われる表の場合、索引の作成は慎重に行う必要があります。emp(ename);3.ビューの作成ビューは、SELECT文に名前を付けて保存したオブジェクトです。ビューを使用することで、表示する列を制限したり、複雑なSELECT文を隠したりすることができます。ビューの作成SELECT文で列別名を使用しない場合、元の列名がビューにおける列名になります。そのため、列の計算や関数を使用した列が含まれる場合は、列別名を使用する必要があります。6問題1部門番号10と20のみのデータを表示だけできるようにしたビューを選択しなさい。UPDATE;正解:c解説ビューの作成時に、表示だけできるように指定するということですから、読み取り専用のビューを作成します。ONLY句を使用してビューを作成します(正解c)。選択肢aのように標準のビューの場合は、グループ関数の使用など制限に違反しなければ更新可能です。ONLY句ということになりますね。OPTION句は、更新は可能ですが、更新結果がビュー定義に違反するときは更新できないというものです。この問題であれば、WHERE句で使用している部門番号10と20のレコード以外の更新が拒否されます。選択肢dと選択肢eで使用しているFORCE句は、ビューの基礎表(この問題ではemp表)が存在していなくてもビュー定義を作成できるというキーワードです。ビューの基礎表が存在していない場合、FORCE句のない選択肢aではエラーとなりますが、選択肢dなら作成できます。UPDATEという句は存在しません。問題2ビューの操作に必要なものを選択しなさい。正解:b解説ビューを使用する利点の1つに、アクセス制御があります。ビューはSELECT文に名前を付けたオブジェクトですので、列と行にアクセス制限をすることが可能です。1つの利点は、ビューに対する権限さえあれば、ビューの基礎表へのアクセス権限は必要ないということです(正解b)。ビューの使用に当たり、選択肢aのような行の格納は必須ではありません。基礎表が空であってもビューを定義したりビューを使用したりすることはできます。選択肢cと選択肢dのような基礎表の所有や表へのSELECT権限は、ビューの使用には必要ではありません。問題3ビューを使用して行えることを2つ選択しなさい。問題2でも解説したとおり、ビューの利点の1つはアクセス制限が行えることです(正解c)。ONLY句を指定すれば、読み取り専用のビューを作成することもできます(正解a)。グループ関数やDISTINCTなどを使用したビューの場合は更新はできませんが、単純なビューの場合はビューを通した基礎表への更新もできます。データベースが停止した状態では、ビューを使用することはできません。データベースオブジェクトですから、データベースが起動している必要があります(選択肢b)。ビューはSELECT文に名前を付けて保存しているだけですから、問い合わせのパフォーマンスを向上させるという目的で使用するものではありません(選択肢d)。問い合わせパフォーマンスを向上させたいのであれば、索引の利用などを検討しましょう。4.シノニムの作成シノニムを使用すると、オブジェクトに別名を作成できます。複雑な表名や別のユーザーが所有するオブジェクト(「ユーザー名.オブジェクト名」でアクセス)に単純な名前を付けることで、アクセスが容易になります。元のオブジェクト名;PUBLIC:全データベースユーザーが使用できるシノニム。hr.employees;シノニムを経由してアクセスするオブジェクトに対する権限は別途必要です。権限がない場合、シノニムを使用しようとするとエラーとなります。オブジェクト"HR"."EMPLOYEES"は存在しません問題1シノニムを作成することが有効なものを2つ選択しなさい。前回の宿題にした問題です。シノニムはオブジェクトに付ける別名です。同じものを指し示すなら、長く複雑な名前よりも短く簡単な名前の方がアクセスが容易ですね。最初からそのように考えてオブジェクト名を宣言すればよいのですが、別のユーザーが所有するオブジェクトの場合は「所有者名.オブジェクト名」が正式名称となるため、やはり長い名前になってしまいます。このようなとき、シノニムを宣言しておくことでアクセスが楽になります。アプリケーションなどを開発していてバージョンアップしたとき、名前を変えなくてはならないが、下位互換性のため元の名前でもアクセスできるようにしておきたいなどの場合もシノニムは有効です。シノニムを使用したからといって権限管理が変化するわけではありません。シノニムの所有者が、シノニム経由でアクセスするオブジェクトに対する権限を持っていない場合、アクセス時にエラーとなります(選択肢c)。シノニムを使用することで、元のオブジェクト名を隠すことにはなりますが、列や行を制限するわけではないため、アクセス制限目的で使用することはないでしょう(選択肢e)。シノニムを使用したからといって検索パフォーマンスが向上するわけではありません(選択肢a)。検索パフォーマンスを向上させたいのであれば、索引の調整などを行った方がよいでしょう。順序とは、一意的な数値を自動生成するためのオブジェクトです。昇順(値を増やす)順序オブジェクトと降順(値を減らす)順序オブジェクトのいずれかを作成できます。表から独立していますので、複数の表で共有するように採番することもできます。一度発行された番号は、トランザクションをロールバックしても元に戻すことはできないため、連番とは限りません。順序の作成時にCYCLEを宣言した場合、最大値(降順の場合は最小値)に達したら最小値(降順の場合は最大値)に戻りますので、一意でない値を作成することもできます。