teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

引用元の訂正

2016/10/16 02:28

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,9 @@
1
1
  DBMSのトランザクション分離レベル(DBMSによって異なる)とプログラムは影響を受けるのでしょうか?
2
- 「達人に学ぶDB設計徹底指南書」という本を読んでいます。
2
+ 「達人に学ぶDB設計徹底指南書」(2012年、ミック著)のという本を読んでいます。
3
- 次のような文章がありました。オートナンバリングの実現方法としてアプリケーション側で実装した場合についての記述です。
3
+ 次のような文章が238ページにありました。オートナンバリングの実現方法としてアプリケーション側で実装した場合についての記述です。
4
4
  なお、オートナンバリングで作られる代理キーは市町村についてのデータを管理する「市町村」テーブルにあります。さらに、アプリケーション側の実装では、採番テーブルという一行一列の整数を保持したテーブルを用い、他のテーブルに要素が挿入されるたび、値をインクリメントしていきます。
5
5
 
6
- 「おそらく最大の問題は、排他制御の仕組みをきちんと作らないと機能的なバグを生み出してしまうことです。考えてみればわかることですが、二人以上の人間が同時に採番テーブルにアクセスして、同じ番号を引き当ててしまったら、「市町村」テーブルへのINSERT時に一意制約違反がおきます。また、逆に番号が飛び石になってしまうこともあります。これを防止するには、一人が採番テーブルにアクセスした時点でテーブルをロックし、他の人間は山椒も更新もできないようにすることです。こうした排他制御を意識したプログラム作成は、複雑になりがちですし、DBMS間でトランザクション分離レベルが異なることも多いため、異なるDBMSにプログラムを移植するにも、簡単にはいきません。」
6
+ 「おそらく最大の問題は、排他制御の仕組みをきちんと作らないと機能的なバグを生み出してしまうことです。考えてみればわかることですが、二人以上の人間が同時に採番テーブルにアクセスして、同じ番号を引き当ててしまったら、「市町村」テーブルへのINSERT時に一意制約違反がおきます。また、逆に番号が飛び石になってしまうこともあります。これを防止するには、一人が採番テーブルにアクセスした時点でテーブルをロックし、他の人間は参照も更新もできないようにすることです。こうした排他制御を意識したプログラム作成は、複雑になりがちですし、DBMS間でトランザクション分離レベルが異なることも多いため、異なるDBMSにプログラムを移植するにも、簡単にはいきません。」
7
7
 
8
8
  トランザクション分離レベルが異なるからプログラムの移行がうまく行かない、という理屈がわかりません。
9
9
  例えば、あるDBMSは5つのSQL文をためて、一気に実行するが、別のDBMSは10個ためてから、実行する、といった違いがトランザクション分離レベルの意味になると思うのですが、このレベルの違いがどうしてプログラムの移行に関わるのでしょうか?