naobe @ ウィキ
RDB共通
最終更新:
naobe
RDBに戻る
ER図
http://7ujm.net/SQL/ER.html より
シノニム
テーブルに対する別名のこと。他のユーザが所有している(他のユーザのスキーマである)テーブルに対して、自分のスキーマの別名を作成することで、スキーマ指定せずともアクセス可能になる。
【例】
GRANT SELECT ON ADMIN.TEST_TABLE TO WORKER ; CREATE SYNONYM WORKER.TEST_TABLE_ALIAS FOR ADMIN.TEST_TABLE ;
char型とvarchar型について
http://tridentfield.x0.com/blog/?p=24 より
char 型のカラムに指定サイズに満たないデータを入れた場合、不足バイト分のスペースで埋められる。たとえば、8 バイトの char 型のカラムに「test」という文字を挿入すると、データベースには「test____」(_はスペース)というデータで格納される。 char 型のカラムはデータ挿入時に指定サイズ分が記憶領域に確保されるが、varchar 型のカラムでは必要な分のみ確保される。 varchar 型のカラムのデータを格納されているデータより大きなサイズのデータに更新しようとしたときに、再度記憶領域のサイズを確保する処理が行われる事がある。 パフォーマンスに敏感になっている DB アドミニストレータからしてみると、この些細な点でも気になることだろう。
チェックポイント
http://www.netlaputa.ne.jp/~hijk/study/ae/warmstart.html 参照
commitを実行して確定したRDBのデータが、ディスクに書かれるタイミング。周期的に発生する場合と、メモリバッファが一杯になった場合がある。 チェックポイント時点ではそのときのDBの内容と、トランザクションのログが残っている。両者からロールバック、ロールフォワードによってDBの内容をできるだけ復元する。
アイソレーションレベル
| アイソレーションレベル | DB2 | 説明 | ダーティリード | ノンリピータブルリード | ファントムリード |
| READ_UNCOMITTED | UR(Uncomitted Read) | コミットしていない行を読める | × | × | × |
| READ_COMITTED | CS(Cursor Stability) | コミットした後のみ読める。他のトランザクションが複数の行をUPDATE中にREADしたときに途中の行までがUPDATEした状態を読み込む(ダーティリード)のを防ぐ。 | ○ | × | × |
| REPEATABLE_READ | RS(Read Stability) | 繰り返して同じ行をREADしても整合性を失わない。1回目のREADと2回目のREADの間に他のトランザクションが該当行をUPDATEした場合に違う値を読み込む(ノンリピータブルリード)のを防ぐ。トランザクションの期間中、SELECTした行をロックする。 | ○ | ○ | × |
| SERIALIZABLE | RR(Repeatable Read) | 直列を保障する。トランザクションの期間中、テーブル全体をロックする。同じSELECT文を2回発行すると仮定する。SELECTしたのちに他のトランザクションがinsertを行い、次のSELECTでinsertされた行を読み込む(ファントムリード)のを防ぐ | ○ | ○ | ○ |
DB2のCSでの例
DB2はデフォルトでは分離レベルはCSになる
端末1でVWAM07のstorenum=st002のtypeは2
端末1でVWAM07のstorenum=st002のtypeを5 にupdate
端末1でselectすると、typeは5に変わる。
端末2でselectすると、typeは2のまま。commitしていないため、dirty readを防いでいる。 select * from VWAM07 with urを実行すると、typeは5になる。
端末1でcommitを実行
端末2でselectするとtypeは5に変わる。
楽観的ロック
正規系
http://www.atmarkit.co.jp/fdb/rensai/db_enginer03/db_enginer03_1.html から抜粋
第1正規系
関係から以下の操作をすることで得られる。
- キーを設定
- 繰り返しグループを別テーブルに
- 導出項目を削除
下図の非正規系の注文番号をキーに、商品IDから数量を別テーブル(注文明細)にする。
第2正規系
- 第1正規系から部分関数従属性を取り除くことで得られる
注)
| 関数従属性 | ある属性Aの値が決まるとき、属性Bが一意に決まること。A --> B と表記する。下図の第1正規系では、注文明細の商品IDが決まれば、商品名、フォーマット、単価が一意に決まる。 |
| 部分関数従属性 | 部分関数従属性とは、キーの一部に非キー属性(キー以外の属性)が関数従属している状態のことをいう |
第3正規系
- 第2正規形から推移関数従属性を取り除くことで得られる
注)推移関数従属性とは、Aが決まるとBが決まり、その結果Cが決まるという関係で「A→B→C」(ただしB→Aは不成立)と表記する。B→Cは非キーから非キーへの推移。下図の第2正規系では、顧客IDと名前~電話番号にあたる。
【正規系の推移】
