Submit Search
Upload
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
•
4 likes
•
10,967 views
makopi 23
Follow
2013/6/13(木) SQLアンチパターン読書会のアジェンダ資料です。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 16
Download now
Download to read offline
Recommended
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
こわくない Git
こわくない Git
Kota Saito
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
Tomoaki Uchida
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
Recommended
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
こわくない Git
こわくない Git
Kota Saito
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
Tomoaki Uchida
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
Azureの概要と学生無料枠内でWebアプリをデプロイするまで
Azureの概要と学生無料枠内でWebアプリをデプロイするまで
4423
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
suno88
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Koichiro Matsuoka
お悩み解決!データベースの仮想化統合(DBの仮想化統合には気をつけろ!)
お悩み解決!データベースの仮想化統合(DBの仮想化統合には気をつけろ!)
オラクルエンジニア通信
実はとても面白い...Documentation library
実はとても面白い...Documentation library
Kouta Shiobara
More Related Content
What's hot
データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
Azureの概要と学生無料枠内でWebアプリをデプロイするまで
Azureの概要と学生無料枠内でWebアプリをデプロイするまで
4423
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
suno88
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Koichiro Matsuoka
What's hot
(20)
データベース設計徹底指南
データベース設計徹底指南
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Azureの概要と学生無料枠内でWebアプリをデプロイするまで
Azureの概要と学生無料枠内でWebアプリをデプロイするまで
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Similar to SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
お悩み解決!データベースの仮想化統合(DBの仮想化統合には気をつけろ!)
お悩み解決!データベースの仮想化統合(DBの仮想化統合には気をつけろ!)
オラクルエンジニア通信
実はとても面白い...Documentation library
実はとても面白い...Documentation library
Kouta Shiobara
MySQL最新情報
MySQL最新情報
yoyamasaki
SharePoint 2013 Preview レビュー
SharePoint 2013 Preview レビュー
Hirofumi Ota
超高速な機械学習を Oracle Database で実現!
超高速な機械学習を Oracle Database で実現!
オラクルエンジニア通信
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ
kumake
Oracle設計
Oracle設計
Kouta Shiobara
楽天における大規模データベースの運用
楽天における大規模データベースの運用
Rakuten Group, Inc.
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
Insight Technology, Inc.
JANOG37 Pattern BoF text
JANOG37 Pattern BoF text
Ken SASAKI
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
Kentaro Matsui
非エンジニアのSQL活用が加速させる事業成長
非エンジニアのSQL活用が加速させる事業成長
Keiko Inagaki
AWS朝会2022/1 セッション① 数年間、レイクハウスを設計運用してみた
AWS朝会2022/1 セッション① 数年間、レイクハウスを設計運用してみた
tatsuya 264
CoreDataをバックグラウンドで扱うためのTips
CoreDataをバックグラウンドで扱うためのTips
Yohei Yamaguchi
Azure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPS
nishioka1
Miyazaki流sql
Miyazaki流sql
hafuu
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search
Kazuhiro Wada
コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略
fisuda
データベース技術の羅針盤
データベース技術の羅針盤
Yoshinori Matsunobu
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
Mikiya Okuno
Similar to SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
(20)
お悩み解決!データベースの仮想化統合(DBの仮想化統合には気をつけろ!)
お悩み解決!データベースの仮想化統合(DBの仮想化統合には気をつけろ!)
実はとても面白い...Documentation library
実はとても面白い...Documentation library
MySQL最新情報
MySQL最新情報
SharePoint 2013 Preview レビュー
SharePoint 2013 Preview レビュー
超高速な機械学習を Oracle Database で実現!
超高速な機械学習を Oracle Database で実現!
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ
Oracle設計
Oracle設計
楽天における大規模データベースの運用
楽天における大規模データベースの運用
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
JANOG37 Pattern BoF text
JANOG37 Pattern BoF text
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
非エンジニアのSQL活用が加速させる事業成長
非エンジニアのSQL活用が加速させる事業成長
AWS朝会2022/1 セッション① 数年間、レイクハウスを設計運用してみた
AWS朝会2022/1 セッション① 数年間、レイクハウスを設計運用してみた
CoreDataをバックグラウンドで扱うためのTips
CoreDataをバックグラウンドで扱うためのTips
Azure SQLデータベース最新動向&TIPS
Azure SQLデータベース最新動向&TIPS
Miyazaki流sql
Miyazaki流sql
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search
コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略
データベース技術の羅針盤
データベース技術の羅針盤
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
Recently uploaded
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Recently uploaded
(9)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
1.
SQLアンチパターン読書会 4章:キーレスエントリ(外部キー嫌い) 2013/6/13(木) @makopi23
2.
2 4.1 目的: DBのアーキテクチャを単純化する 外部キーを使用しない主な理由 1.
データの更新が、参照整合性制約と衝突する。 2.DB設計の柔軟性が極めて高いので、参照整合性制約 をサポートできない 3. データベースが外部キーのために作成するインデックス が、パフォーマンスに影響すると考えている。 4. 外部キーをサポートしないデータベース製品を使ってい る 5. 外部キーを宣言する構文を調べなくてはならない。
3.
3 4.2 アンチパターン:外部キー制約を使用しない 外部キー制約を使用しないと ➢ データベース設計がシンプルになる...? ➢
柔軟性が高まる...? ➢ 実行速度が早くなる...? 代償(トレードオフ) ➢ 開発者が、参照整合性を保証するためのコードを書く 責任が生じる。
4.
4 4.2.1 完璧なコードを前提にしている (1/2) ●
参照整合性を保証するための解決策 ➢ データの関連付けを常に維持するためのコードを書く。 ➢ 変更を適用する前に追加のSELECTクエリを実行し、 変更によって参照が壊れないことを確認する。 ✔ 例1: 行を挿入する前に、親の行が存在することを確認する。 ✔ 例2: 行を削除する前に、子の行が存在しないことを確認する。
5.
5 4.2.1 完璧なコードを前提にしている (2/2) ●
この解決策の欠点 ➢ 確認クエリを実行した直後に、別の場所で誰かにDBを 更新された場合に不具合が生じる可能性が出る。 ➢ 「確認+更新」の間、テーブルロックをかければ上記の 問題は解決するが、性能問題など別の問題に直面す る。
6.
6 4.2.2 ミスを調べなければならない ● 間違った解決策 ➢ 壊れた参照をチェックするスクリプトを書く ● なぜダメなのか ➢
すべての参照に対してスクリプトが必要となる ➢ 数百ものチェックを毎日、何回も実行しなくてはならない ➢ 壊れた参照を検出したとしても、修正できるとは限らな い
7.
7 4.2.3 「私のミスではありません!」 ● データベースに関するすべてのコードが完璧であ ることは、まずありえない。 ➢
すべての更新ロジックに対し、参照整合性を担保するた めの対処を施したか確認するのは、簡単ではない。 (複数のアプリが同一のDBにアクセスすることもある) ➢ あるユーザが、SQL実行ツールや自ら書いたスクリプト によって直接DBを変更し、参照を壊してしまう可能性が ある。 DBDBにアクセスするすべてのアプリとスクリプトがにアクセスするすべてのアプリとスクリプトが 正しく変更を行ったかどうかは、信頼できない!正しく変更を行ったかどうかは、信頼できない!
8.
8 4.2.4 「キャッチ=22」なUPDATE ● 子の行が依存する列をUPDATEする際のジレンマ ➢ 親の行を更新するまで、子の行の更新はできない ➢
親の更新も、参照する子の値を更新する前に実行でき ない ● 親と子を両方同時に変更する必要があるが、2つ の異なる更新処理を同時に実行することは不可能
9.
9 4.3 アンチパターンの見つけ方 次のような言葉を耳にしたらアンチパターンの兆候 があることを示している。 ➢
あるテーブルには存在するけど、もう1つのテーブルに は存在しない値を調べるクエリは、どう書けばいい? ➢ あるテーブルの値が、別のテーブルへの挿入に使われ ていることを簡単にチェックする方法はある? ➢ 外部キー?データベースの実行速度を遅くするから、 使ってはならないと教わったのだけど。
10.
10 4.4 アンチパターンを用いても良い場合 ● 外部キーをサポートしていないデータベース製品を 使わざるを得ない場合 ➢
MySQLのMyISAMストレージエンジン ➢ バージョン3.6.19未満のSQLite ● 外部キーを用いた関連付けを行えない、極端に柔 軟なデータベース設計を扱わなければならない場 合
11.
11 4.5 解決策:外部キー制約を宣言する 参照整合性の強制の利点 ➢ データの不整合を検出してから修正するのではなく、 DBへの登録時点でミスを阻止できる。 ➢ 既存のコードも、その場限りのクエリも、同じ外部キー に従うようになる。 ➢
うっかり見逃していたコードが、この制約の強制を逃れ ることがなくなる。 ➢ 不要なコードを書く手間を省く。 ➢ DBを変更した場合でも、すべてのコードが同じように 適切に動作することを保証する。 ➢ コードの作成だけでなく、修正や保守の時間も大幅に 削減してくれる。
12.
12 4.5.1 複数テーブルの変更をサポートする カスケード更新 CREATE TABLE
Bugs ( -- 他の列. . . reported_by BIGINT UNSIGNED NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'NEW', FOREIGN KEY (reported_by) REFERENCES Accounts(account_id) ON UPDATE CASCADEON UPDATE CASCADE ON DELETE RESTRICT,ON DELETE RESTRICT, FOREIGN KEY (status) REFERENCES BugStatus(status) ON UPDATE CASCADE ON DELETE SET DEFAULTON DELETE SET DEFAULT);
13.
13 4.5.2 オーバーヘッド、…にはなりません ● 外部キー制約によって、多少のオーバーヘッドが生じ るのは事実。 ● しかし、以下に挙げるように、ほかの選択肢と比べる と、外部キーの方がより効果的 ➢ 挿入、更新、削除の際に、チェックのためにSELECTクエリ を実行する必要がない。 ➢ 複数テーブルの変更を防ぐために、テーブルをロックする 必要がない。 ➢ 他の方法のように孤児が生じてしまうことがないので、デー タ品質管理用スクリプトを定期的に実行する必要がない。
14.
14 まとめ ● 外部キーは簡単に使え、パフォーマンスも改善す る。 ● 単純か複雑化に問わず、あらゆるデータの変更に おける参照整合性の維持に役立つ。 データベースでのミスの発生を未然にデータベースでのミスの発生を未然に 防ぐために、外部キー制約を用いましょう。防ぐために、外部キー制約を用いましょう。
15.
15 参考図書 書籍「データベースリファクタリング」 第8章:参照整合性リファクタリング ➢ 外部キー制約の追加 ➢ 計算カラムへのトリガーの追加 ➢ 外部キー制約の削除 ➢ カスケード削除の導入 ➢ ハードデリートの導入 ➢ ソフトデリートの導入 ➢ 履歴のためのトリガーの導入
16.
16 データベースリファクタリング:第8章 遅延制約チェック 制約の妥当性のチェックは、トランザクション終了時まで 遅延できる。 – 遅延制約: 制約が満たされているかどうかのチェックがコミット時にし か実行されない。遅延制約違反があると、コミット時にそ のトランザクションは取り消される。 – 即時制約: チェックはそれぞれの文が終わった時点で実行される。 制約違反があると、その文は即時にロールバックされる。 Oracle
11g: http://otndnld.oracle.co.jp/document/products/oracle11g/1 11/doc_dvd/server.111/E05765-03/data_int.htm#66501
Download now