SlideShare a Scribd company logo
1 of 24
Download to read offline
RDBRDB におけるバリデーションをにおけるバリデーションを
リレーショナルモデルから考えるリレーショナルモデルから考える
 奥野 幹也
Twitter: @nippondanji
mikiya (dot) okuno (at) gmail (dot) com
@Validation Night 
免責事項
● 本プレゼンテーションにおいて示されている見
解は、私自身の見解であって、オラクル・コー
ポレーションの見解を必ずしも反映したもので
はありません。ご了承ください。
自己紹介
●
MySQL サポートエンジニア
– 日々のしごと
● トラブルシューティング全般
●
Q&A 回答
● パフォーマンスチューニング
など
●
ライフワーク
– 自由なソフトウェアの普及
● オープンソースではない
●
ブログ
– 漢のコンピュータ道
– http://nippondanji.blogspot.com/
今日は個人として
参加しています。
RDB における
バリデーションって
なんだろう?
SQL インジェクション
●
≠RDB の問題
– アプリケーションが意図しない SQL を生成してしまう問題
– アプリケーションの問題
– RDB 側でバリデーションは要らない、アプリでやってくれ。
話が終わった!!
入力バリデーション
●
≠RDB の問題
– アプリケーションが意図しないデータを受け付けてしまう
問題
– アプリケーションの問題
– RDB 側でバリデーションは要らない、アプリでやってくれ。
話が終わった!!
またもや
【悲報】リレーショナルモデルに
バリデーションはない。
Validation
Constraint
制約( Constraint )
● 制約とは、評価した結果真となるべき条件式。
●
Type Constraint
– データ型が満たすべき条件
– ≒ ドメインの定義
●
Database Constraint
– データベース内のデータが満たすべき条件
– 外部キーは Database Constraint の一種
ドメイン
● ドメイン=リレーショナルモデルにおけるデータ型
– 属性(≒カラム)が取りうる値の集合
● 属性の値は、ドメインの要素のひとつであると考える
– 平たく言うと、属性の値は予めドメインに登録されている
とされたものだけであるという考え
– そうなるようにドメインを設計する
ドメインは究極のホワイトリスト!
● ドメイン=属性が取り得る値の集合
– 値は想定されたもののみ
– 集合の要素の一つを取ってくるだけ
– つまり、ホワイトリスト
●
事前に判明している値なら、どれを取っても安全なはず
だが現実は
甘くない!!
どうやってドメインを表現するか
●
実際にドメインを集合として表現することは不可能に近い
– 特に文字列で表現するデータが難しい
●
データサイズが大きい
● ドメインの要素数が膨大になる
● 列挙できるがデータサイズが大きいもの
– 住所 etc
● 未知の値が多すぎて対処できないもの
– 人名、商品名、部品の名称 etc
●
フリーダム過ぎるもの
– メールアドレス、アカウント名、コメント etc
妥協案=ドメインを制約で表現
●
SQL 上で使用できるツール
– CHECK 制約
– CREATE TYPE
– トリガー( CHECK 制約がない製品で)
– テーブル+外部キー制約
● 制約≒テーブルへ格納するデータをフィルタリングする
データの危険性
● ロジックで値をフィルタリングする以上、ホワイトリストには成
り得ない
– 格納されている値は安全ではないかも知れない
– 攻撃用のコードが仕組まれているかも・・・・
●
XSS 、 CSRF 、セカンドオーダー SQL インジェクション
etc
バリデーションが
必要では!?
DB の出力⇒アプリへの入力
● アプリケーションへ入力されたデータは適切にバリデー
ションしましょう。
●
バリデーション≠ RDB の問題
– アプリケーションが意図しないデータを受け付けてしまう
問題
– アプリケーションの問題
– RDB 側でバリデーションは要らない、アプリでやって
くれ。
●
RDB でやるべきことは制約
– ≒RDB へ格納するデータのフィルタリング
ドメインの設計は超重要
● 正しいデータ型を使えばアプリケーションによるバリデーショ
ンの手間が軽減される
●
数値は数値型を
– 数値を文字列で格納するべからず!
– 数値型ならバリデーション不要
●
CHECK 制約で取り得る値の範囲を絞り込む
– 安全であることが保証されていると GOOD!!
●
英数字のみの文字列など
– 正規表現を活用
● フリーダムなデータはアプリ側で確実にバリデーションを
(余談)本当に正しい値か?
● もし仮にホワイトリスト方式でドメインを実装しても、この問い
は完全には消え去らない
– ユーザーが間違った値を選択してしまう可能性がある
– Database Constraint で軽減できるが限界はある
● 最終的にデータが正しいかどうかを確かめるのは、アプリ
ケーションの運用者
– 確認するのは管理権限を持ったユーザー
– ユーザーに身分証の提示を依頼する等
● 氏名、年齢、住所、電話番号
– 実際に機能するかどうか確かめる
●
メールアドレス、 SMS
●
運用設計は重要
– 確認にはコストがかかる
– 重要なデータにコストをかける
● 正しさが重要でないデータもたくさんある
SQL
≠
リレーショナルモデル
SQL≠ リレーショナルモデル
リレーショナルモデル
●
集合論(述語論理)に基づ
くデータモデル
● 全て集合:見出し、組、本
体、ドメイン
●
集合演算に基づく各種操
作が定義されている
SQL
●
リレーショナルモデルに基
づいたデータベース操作言
語
●
SELECT に各種リレーション
の演算が盛り込まれている
●
リレーショナルモデル以外
のデータの扱いおよび操作
も可能
– NULL
– 重複
– カーソル
リレーショナルモデルでは
表現できないものがある
● グラフ
●
ツリー
● 行列
● 履歴
●
全文検索
●
正規表現
● ソート
●
集計
●
空間データ
etc etc
リレーショナルモデルの
外側の世界
● 現実世界のアプリケーション
– リレーショナルモデルに適合するデータと、そうでない
データが入り乱れている。
– リレーショナルモデルには定石がある
– リレーショナルモデル以外の領域に決定的なやりかた
( DB 設計、クエリの書き方等)はない
● 創意工夫が必要
●
外側の世界ではリレーショナルモデルを無理に実践すべき
ではない!!
– そもそも無理
– うまく行ったように見えても技術的負債に
●
両者の境界線を見極めることが重要
– リレーショナルモデルで解決できる部分はリレーショナル
モデルを適用すべし!!
– そうでない部分はリレーショナルモデルを適用してはなら
ない!!
RDB における
制約とバリデーション
● 制約:リレーショナルモデルの世界
– ドメインを近似する( Type Constraint )
– データの整合性を保つ( Database Constraint )
● バリデーション:リレーショナルモデルの外側の世界
– アプリケーションと同じようにバリデーションが必要
●
プロシージャ内で使用する値を検証する
● リレーショナルでないデータ
●
リレーショナルでない各種操作の実行後
– 部分文字列
– 文字列の結合
– ただし、実際には SELECT で取得した文字列を使って動
的にクエリを組み立てない限り、 RDB 内部で問題になる
ことはない。
●
プロシージャ内で PREPARE するべからず
まとめ
●
RDB にあるのは制約
– バリデーションではない
●
RDB まわりでバリデーションが必要になるところ
– RDB からの出力=アプリケーションへの入力
● バリデーションはアプリケーション側の課題
– リレーショナルモデルに沿わないデータやロジック
●
プロシージャ内で PREPARE するべからず
バリデーションについて考えるときも、
リレーショナルモデルについての理解は
大切だと思います。
宣伝:新書籍の紹介
●
リレーショナルデータベース実践入門
– リレーショナルモデル、 SQL 、そして DB 設計が主なテーマの書籍です。
– どうやってリレーショナルデータベースを使いこなすか!
●
リレーショナルモデル基礎編
– SQL とリレーショナルモデル
– 述語論理とリレーショナルモデル
– 正規化 1:  関数従属性
– 正規化 2:  結合従属性
– 直交性
– ドメインの設計
etc
●
アプリケーション開発実践編
– 履歴
– グラフ
– インデックスの設計
– ウェブアプリケーションのためのデータ構造
etc
基礎の基礎から
よくある間違いを
指摘しつつ
応用まで
Q&Aご静聴ありがとうございました。

More Related Content

What's hot

イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴Takuto Wada
 
営業さんまで、社員全員がSQLを使う 「越境型組織」 ができるまでの3+1のポイント | リブセンス
営業さんまで、社員全員がSQLを使う 「越境型組織」 ができるまでの3+1のポイント | リブセンス営業さんまで、社員全員がSQLを使う 「越境型組織」 ができるまでの3+1のポイント | リブセンス
営業さんまで、社員全員がSQLを使う 「越境型組織」 ができるまでの3+1のポイント | リブセンスLivesense Inc.
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技Yoichi Toyota
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
DI(依存性注入)について
DI(依存性注入)についてDI(依存性注入)について
DI(依存性注入)についてYui Ito
 
Glue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみようGlue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみようtakeshi suto
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Amazon s3へのデータ転送における課題とその対処法を一挙紹介
Amazon s3へのデータ転送における課題とその対処法を一挙紹介Amazon s3へのデータ転送における課題とその対処法を一挙紹介
Amazon s3へのデータ転送における課題とその対処法を一挙紹介Tetsunori Nishizawa
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかMikiya Okuno
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
20190806 AWS Black Belt Online Seminar AWS Glue
20190806 AWS Black Belt Online Seminar AWS Glue20190806 AWS Black Belt Online Seminar AWS Glue
20190806 AWS Black Belt Online Seminar AWS GlueAmazon Web Services Japan
 

What's hot (20)

SharePoint で始める情報共有とそのアプローチ
SharePoint で始める情報共有とそのアプローチSharePoint で始める情報共有とそのアプローチ
SharePoint で始める情報共有とそのアプローチ
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
営業さんまで、社員全員がSQLを使う 「越境型組織」 ができるまでの3+1のポイント | リブセンス
営業さんまで、社員全員がSQLを使う 「越境型組織」 ができるまでの3+1のポイント | リブセンス営業さんまで、社員全員がSQLを使う 「越境型組織」 ができるまでの3+1のポイント | リブセンス
営業さんまで、社員全員がSQLを使う 「越境型組織」 ができるまでの3+1のポイント | リブセンス
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
DI(依存性注入)について
DI(依存性注入)についてDI(依存性注入)について
DI(依存性注入)について
 
Glue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみようGlue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみよう
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
Amazon s3へのデータ転送における課題とその対処法を一挙紹介
Amazon s3へのデータ転送における課題とその対処法を一挙紹介Amazon s3へのデータ転送における課題とその対処法を一挙紹介
Amazon s3へのデータ転送における課題とその対処法を一挙紹介
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのか
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
20190806 AWS Black Belt Online Seminar AWS Glue
20190806 AWS Black Belt Online Seminar AWS Glue20190806 AWS Black Belt Online Seminar AWS Glue
20190806 AWS Black Belt Online Seminar AWS Glue
 

Viewers also liked

focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...Satoshi Suzuki
 
Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜eiryu
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方Mikiya Okuno
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルMikiya Okuno
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきかMikiya Okuno
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06Mikiya Okuno
 
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜Mikiya Okuno
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBMikiya Okuno
 
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能Soudai Sone
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityMikiya Okuno
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座Mikiya Okuno
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴Mikiya Okuno
 
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったかMikiya Okuno
 
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version Mikiya Okuno
 
Rdbms qpstudy-okuno
Rdbms qpstudy-okunoRdbms qpstudy-okuno
Rdbms qpstudy-okunoMikiya Okuno
 
実践Herokuデータベース編 Webセミナー
実践Herokuデータベース編 Webセミナー実践Herokuデータベース編 Webセミナー
実践Herokuデータベース編 WebセミナーSalesforce Developers Japan
 
制約をつけて遊ぼう
制約をつけて遊ぼう制約をつけて遊ぼう
制約をつけて遊ぼうFumihito Yokoyama
 
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~Hiroshi Tokumaru
 
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかSecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかHiroshi Tokumaru
 

Viewers also liked (20)

focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...focuslight-validator validate sinatra application - validation night at LINE ...
focuslight-validator validate sinatra application - validation night at LINE ...
 
Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
 
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDB
 
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴
 
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
 
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
 
Rdbms qpstudy-okuno
Rdbms qpstudy-okunoRdbms qpstudy-okuno
Rdbms qpstudy-okuno
 
実践Herokuデータベース編 Webセミナー
実践Herokuデータベース編 Webセミナー実践Herokuデータベース編 Webセミナー
実践Herokuデータベース編 Webセミナー
 
制約をつけて遊ぼう
制約をつけて遊ぼう制約をつけて遊ぼう
制約をつけて遊ぼう
 
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
 
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかSecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
 

Similar to RDBにおけるバリデーションをリレーショナルモデルから考える

デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)Masahiro Nishimi
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09Mikiya Okuno
 
Database qpstudy-okuno
Database qpstudy-okunoDatabase qpstudy-okuno
Database qpstudy-okunoMikiya Okuno
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるのYoshitaka Seo
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpkyon mm
 
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 Koichiro Matsuoka
 
5分で理解するクラウドビジネスアプリ
5分で理解するクラウドビジネスアプリ5分で理解するクラウドビジネスアプリ
5分で理解するクラウドビジネスアプリYoshitaka Seo
 
レスポンシブWebデザインのサイトを作る前に
レスポンシブWebデザインのサイトを作る前にレスポンシブWebデザインのサイトを作る前に
レスポンシブWebデザインのサイトを作る前にYuki Nakane
 
Webデベロッパの祭典@東京:Webエンジニアの視点
Webデベロッパの祭典@東京:Webエンジニアの視点Webデベロッパの祭典@東京:Webエンジニアの視点
Webデベロッパの祭典@東京:Webエンジニアの視点masayoshi takahashi
 
ぼくたちのじゅたくかいはつ(と品質の話)
ぼくたちのじゅたくかいはつ(と品質の話)ぼくたちのじゅたくかいはつ(と品質の話)
ぼくたちのじゅたくかいはつ(と品質の話)Atsushi Harada
 
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)Ryuji Tamagawa
 
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み慎一 古賀
 
【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏
【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏
【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏Developers Summit
 
phpspecで始めるBDD
phpspecで始めるBDDphpspecで始めるBDD
phpspecで始めるBDDYuuki Takezawa
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
LightSwitchでWebアプリ開発
LightSwitchでWebアプリ開発LightSwitchでWebアプリ開発
LightSwitchでWebアプリ開発Yoshitaka Seo
 
Blendの便利機能振り返り
Blendの便利機能振り返りBlendの便利機能振り返り
Blendの便利機能振り返り一希 大田
 
見る前に跳べ 〜ギークの工夫で社会を変えよう〜
見る前に跳べ 〜ギークの工夫で社会を変えよう〜見る前に跳べ 〜ギークの工夫で社会を変えよう〜
見る前に跳べ 〜ギークの工夫で社会を変えよう〜Takuya Oikawa
 

Similar to RDBにおけるバリデーションをリレーショナルモデルから考える (19)

デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
 
Database qpstudy-okuno
Database qpstudy-okunoDatabase qpstudy-okuno
Database qpstudy-okuno
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるの
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
 
5分で理解するクラウドビジネスアプリ
5分で理解するクラウドビジネスアプリ5分で理解するクラウドビジネスアプリ
5分で理解するクラウドビジネスアプリ
 
レスポンシブWebデザインのサイトを作る前に
レスポンシブWebデザインのサイトを作る前にレスポンシブWebデザインのサイトを作る前に
レスポンシブWebデザインのサイトを作る前に
 
Webデベロッパの祭典@東京:Webエンジニアの視点
Webデベロッパの祭典@東京:Webエンジニアの視点Webデベロッパの祭典@東京:Webエンジニアの視点
Webデベロッパの祭典@東京:Webエンジニアの視点
 
ぼくたちのじゅたくかいはつ(と品質の話)
ぼくたちのじゅたくかいはつ(と品質の話)ぼくたちのじゅたくかいはつ(と品質の話)
ぼくたちのじゅたくかいはつ(と品質の話)
 
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
 
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
 
【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏
【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏
【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏
 
phpspecで始めるBDD
phpspecで始めるBDDphpspecで始めるBDD
phpspecで始めるBDD
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
My sql casual12lt
My sql casual12ltMy sql casual12lt
My sql casual12lt
 
LightSwitchでWebアプリ開発
LightSwitchでWebアプリ開発LightSwitchでWebアプリ開発
LightSwitchでWebアプリ開発
 
Blendの便利機能振り返り
Blendの便利機能振り返りBlendの便利機能振り返り
Blendの便利機能振り返り
 
見る前に跳べ 〜ギークの工夫で社会を変えよう〜
見る前に跳べ 〜ギークの工夫で社会を変えよう〜見る前に跳べ 〜ギークの工夫で社会を変えよう〜
見る前に跳べ 〜ギークの工夫で社会を変えよう〜
 

More from Mikiya Okuno

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMikiya Okuno
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編Mikiya Okuno
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationMikiya Okuno
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015Mikiya Okuno
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門Mikiya Okuno
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会Mikiya Okuno
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012Mikiya Okuno
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門Mikiya Okuno
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Mikiya Okuno
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.Mikiya Okuno
 

More from Mikiya Okuno (12)

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyond
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
Mysql toranomaki
Mysql toranomakiMysql toranomaki
Mysql toranomaki
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
Database smells
Database smellsDatabase smells
Database smells
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.
 

RDBにおけるバリデーションをリレーショナルモデルから考える