午前Ⅱ_自分用まとめ [午前Ⅱ]
復習用問題
1.多対多のエンティティに対して行うモデリングは?
2.関数従属と部分集合について説明せよ
3.隔離性水準を4つ述べよ。またそれぞれの許容する独立性阻害要因を3つ述べよ
4.チェックポイントって何してるポイント?
5.WALプロトコルって何?
■連関エンティティとは
二つのエンティティが多対多の関係の時に、その間に1つエンティティを作ってやる。
たとえば「学生 対 資格」とか「学生 対 授業」とか。。
上記の間に学生一人一人の資格取得状況を持つ「資格取得」とか学生ごとの授業情報を持つ「授業一覧」とかを
挟んでやると1対多という関係になる。
■関数従属とは
”関数従属性とは、「ある属性Aの値が決まるとき、属性Bが一意に決まる」ことをいい、「A→B」と表記します。正規化では、関数従属性に基づいてテーブルの分解を行っていくため、この言葉は非常に大切です。
参考:http://www.atmarkit.co.jp/ait/articles/0605/11/news124_2.html
要するに、さっきの学生 対 資格なら学生番号がわかれば資格取得情報がわかり、その資格の詳細がわかる、的なことだろうか。
★関数従属と部分集合
「BはAの部分集合である」場合、A→B(BはAの関数従属)が成り立つらしい。
数学的にはさっぱりだが、「まあAが全部わかれば、Bもおのずとわかるでしょ」ってことだと思う。
■ISOLATION LEVEL(隔離性水準)
独立性阻害要因を許容するかどうかのレベル。
下に行くほど隔離レベルが強くなる。
・READ UNCOMMITTED:全部保証しない
・READ COMMITTED:ダーティリードだけ発生しない
・REPEATABLE READ:ダーティリード、ノンリピータブルリードが発生しない
・SERIALIZABLE:全部発生しない。ただし、ここまでやるか、という隔離性でスループットは悪くなるみたい。
■独立性阻害要因
・ダーティリード
→別トランザクションAのコミット前の更新情報を読んでしまうもの。
Aがロールバックしてもそのまま更新情報を使ってしまうというダーティなやつ。
・ノンリピータブルリード(ファジーリード)
→一回目でselectした後、別トランザクションAが更新してコミットする。
んで二回目にまた同じselectしたら、更新された値を読んでしまう。
同じデータselectをリピートできないという微妙なやつ
・ファントムリード
→別トランザクションAでデータをinsertする(コミット前)。コミットされてないのでselectしても何も表示されない。
ここでAがコミットする。
するとselectすると急にファントムのごとくAがinsertしたデータが浮かび上がるというホラーのような話。
■チェックポイント
データ更新は、メモリ上(バッファ)で更新→DBに反映、という流れになる。この同期タイミングがチェックポイントだ。
■WAL(Write Ahead Log)プロトコル
⇒ログ先書き。下の順番でコミットを実行
①更新前イメージのログファイルへの書き出し
②更新後イメージのログファイルへの書き出し
③DBの更新
1.多対多のエンティティに対して行うモデリングは?
2.関数従属と部分集合について説明せよ
3.隔離性水準を4つ述べよ。またそれぞれの許容する独立性阻害要因を3つ述べよ
4.チェックポイントって何してるポイント?
5.WALプロトコルって何?
■連関エンティティとは
二つのエンティティが多対多の関係の時に、その間に1つエンティティを作ってやる。
たとえば「学生 対 資格」とか「学生 対 授業」とか。。
上記の間に学生一人一人の資格取得状況を持つ「資格取得」とか学生ごとの授業情報を持つ「授業一覧」とかを
挟んでやると1対多という関係になる。
■関数従属とは
”関数従属性とは、「ある属性Aの値が決まるとき、属性Bが一意に決まる」ことをいい、「A→B」と表記します。正規化では、関数従属性に基づいてテーブルの分解を行っていくため、この言葉は非常に大切です。
参考:http://www.atmarkit.co.jp/ait/articles/0605/11/news124_2.html
要するに、さっきの学生 対 資格なら学生番号がわかれば資格取得情報がわかり、その資格の詳細がわかる、的なことだろうか。
★関数従属と部分集合
「BはAの部分集合である」場合、A→B(BはAの関数従属)が成り立つらしい。
数学的にはさっぱりだが、「まあAが全部わかれば、Bもおのずとわかるでしょ」ってことだと思う。
■ISOLATION LEVEL(隔離性水準)
独立性阻害要因を許容するかどうかのレベル。
下に行くほど隔離レベルが強くなる。
・READ UNCOMMITTED:全部保証しない
・READ COMMITTED:ダーティリードだけ発生しない
・REPEATABLE READ:ダーティリード、ノンリピータブルリードが発生しない
・SERIALIZABLE:全部発生しない。ただし、ここまでやるか、という隔離性でスループットは悪くなるみたい。
■独立性阻害要因
・ダーティリード
→別トランザクションAのコミット前の更新情報を読んでしまうもの。
Aがロールバックしてもそのまま更新情報を使ってしまうというダーティなやつ。
・ノンリピータブルリード(ファジーリード)
→一回目でselectした後、別トランザクションAが更新してコミットする。
んで二回目にまた同じselectしたら、更新された値を読んでしまう。
同じデータselectをリピートできないという微妙なやつ
・ファントムリード
→別トランザクションAでデータをinsertする(コミット前)。コミットされてないのでselectしても何も表示されない。
ここでAがコミットする。
するとselectすると急にファントムのごとくAがinsertしたデータが浮かび上がるというホラーのような話。
■チェックポイント
データ更新は、メモリ上(バッファ)で更新→DBに反映、という流れになる。この同期タイミングがチェックポイントだ。
■WAL(Write Ahead Log)プロトコル
⇒ログ先書き。下の順番でコミットを実行
①更新前イメージのログファイルへの書き出し
②更新後イメージのログファイルへの書き出し
③DBの更新