Submit Search
Upload
Introduction of SQL Anti-pattern at Phpcon Hokkaido
•
1 like
•
1,204 views
Kenta Kawai
Follow
This slide introduce SQL Anti-pattern for PHP conference Hokkaido.
Read less
Read more
Data & Analytics
Report
Share
Report
Share
1 of 54
Download now
Download to read offline
Recommended
JRubyで作るapiサーバー
JRubyで作るapiサーバー
Yamamoto Kazuhisa
2012年2月25日に開催された岡山Javaユーザー会勉強会で発表した内容です
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
PlayFramework関西ビギナーズ 第1回(2012/11/17開催) にて使用したスライド。 最初にPlayの概要を説明した後、Play1.2.5で簡単なアプリケーションを作成する模様をライブコーディングしながらPlayの仕組みを解説しました。
Scala.js触ってみた
Scala.js触ってみた
Asami Abe
2015/11/21 2016年のAltJSについて語る会発表資料 http://kfug.connpass.com/event/21062/
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Katsunori Kanda
scalaをプロダクションで使っていこうとした経緯と導入した結果。現在抱えている課題など。
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
2014/02/08(土) Scala関西ビギナーズ 第3回にて発表。 Scala関西ビギナーズWiki https://github.com/SAMMY7th/scala_kb/wiki
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
Haruki Okada
市ヶ谷Geek★Night #3の発表資料です http://ichigayageek.connpass.com/event/18810/
Contributing to Scala OSS from East Asia #ScalaMatsuri
Contributing to Scala OSS from East Asia #ScalaMatsuri
Kazuhiro Sera
http://scalamatsuri.org/
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったで
Asami Abe
2016/05/28 Scala福岡 LT資料です。
Recommended
JRubyで作るapiサーバー
JRubyで作るapiサーバー
Yamamoto Kazuhisa
2012年2月25日に開催された岡山Javaユーザー会勉強会で発表した内容です
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
PlayFramework関西ビギナーズ 第1回(2012/11/17開催) にて使用したスライド。 最初にPlayの概要を説明した後、Play1.2.5で簡単なアプリケーションを作成する模様をライブコーディングしながらPlayの仕組みを解説しました。
Scala.js触ってみた
Scala.js触ってみた
Asami Abe
2015/11/21 2016年のAltJSについて語る会発表資料 http://kfug.connpass.com/event/21062/
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Katsunori Kanda
scalaをプロダクションで使っていこうとした経緯と導入した結果。現在抱えている課題など。
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
2014/02/08(土) Scala関西ビギナーズ 第3回にて発表。 Scala関西ビギナーズWiki https://github.com/SAMMY7th/scala_kb/wiki
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
Haruki Okada
市ヶ谷Geek★Night #3の発表資料です http://ichigayageek.connpass.com/event/18810/
Contributing to Scala OSS from East Asia #ScalaMatsuri
Contributing to Scala OSS from East Asia #ScalaMatsuri
Kazuhiro Sera
http://scalamatsuri.org/
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったで
Asami Abe
2016/05/28 Scala福岡 LT資料です。
NoNoSQL
NoNoSQL
Yuichiro Ebihara
2011年11月25日のClubDB2で行ったライトニングトークでの発表資料。
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
English version is here: http://www.slideshare.net/seratch/jjug-ccc-2014springeng http://www.java-users.jp/?page_id=1048#R2-4
頑張りすぎないScala
頑張りすぎないScala
takezoe
https://d-cube.connpass.com/event/74106/
SaCSS vol.56 こんなに素敵なBrackets!
SaCSS vol.56 こんなに素敵なBrackets!
Atsushi Handa
オープンソースのエディタ、Bracketsの総括的な紹介スライドです! (2015/5/23 札幌で開催されたSaCSS Vol.56にて使用)
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ
hirotakanosato
ScalaMatsuri2016 2日目、カンファレンスLTセッションで発表した内容です。
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
Kenji Mori
ぼくのかんがえたさいきょうの Rails スタートダッシュ
Javaから見たRubyの世界
Javaから見たRubyの世界
Takafumi Yoshida
クラスメソッド会社説明会 in 北海道札幌 at smokeymonkey #cmdevio
クラスメソッド会社説明会 in 北海道札幌 at smokeymonkey #cmdevio
smokey monkey
元インフラエンジニアが Scalaを触ってつまづいたところ。
元インフラエンジニアが Scalaを触ってつまづいたところ。
takako onoue
Scala関西2017発表資料。
CSSから国民を守る党ver2
CSSから国民を守る党ver2
akatsuki 1910
CSS叩いて返り討ちになる話
MultiParadimeDesign
MultiParadimeDesign
spring_kuma
DDDrbでの発表資料です
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
Shuji Watanabe
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
おっさんES6/ES2015,React.jsを学ぶ 2016JavaScript入門 2016/11/21 @BizReach D3イベント登壇資料 最近のJavaScript動向 ・試験に出るJavaScript21年の歴史 ES6/ES2015を学ぶ ・ES6/ES2015概要 ・ES5を振り返る ・altjsの意義 Reactを学ぶ ・DOCを読む ・Tutorialをやる まとめ ・今回の学習を通じて感じたこと
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
ShogoOkazaki
Rust LT Online #6 で登壇した際の発表資料です。 イベントページ: https://rust.connpass.com/event/234637/ スライド内で紹介した記事: https://qiita.com/tsuchinoko0402/items/dda60c43dbe4e83e729d
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める
Akio Terayama
アジャイルサムライ 6章 ユーザストーリーを集めるのまとめ。
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
JJUG CCC 2014 Soringで行ったユニットテストハンズオンでの資料です。
カスタムNodeのススメ
カスタムNodeのススメ
Koichi Ota
Node-RED UG勉強会 2018 年末LTパーティのLT資料です。 https://node-red.connpass.com/event/104928/
Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点
ota42y
API Meetup Tokyo #25 AIの民主化を推進する日本のAPI提供者 ~ クラウドベンダーだけじゃない ~ https://api-meetup.doorkeeper.jp/events/72837 で発表した資料です
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
第76回Ruby関西での発表で使ったスライドです https://rubykansai.doorkeeper.jp/events/55398
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
Asami Abe
2016/01/31 ScalaMatsuri アンカンファレンス コミュニティLT 関西のScalaコミュニティ紹介
リーダブルパスワード - SQLアンチパターンより抜粋 -
リーダブルパスワード - SQLアンチパターンより抜粋 -
hiro345
2015-11-28 NSEG勉強会で発表したリーダブルパスワードについての資料です。SQLアンチパターンのリーダブルパスワードについて説明をしています。発表時に使った資料にあったタイプミスなどは修正しました。
KPT発表会 - アジャイルひよこクラブ
KPT発表会 - アジャイルひよこクラブ
Atsushi Harada
2014/11/25 アジャイルひよこクラブ第3回の、現場をより良くするためにやっていることを3つの観点で振り返る「KPT発表会」のスライド。 実際にKPTをやってみてよかったこと、未解決の問題など。
More Related Content
What's hot
NoNoSQL
NoNoSQL
Yuichiro Ebihara
2011年11月25日のClubDB2で行ったライトニングトークでの発表資料。
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
English version is here: http://www.slideshare.net/seratch/jjug-ccc-2014springeng http://www.java-users.jp/?page_id=1048#R2-4
頑張りすぎないScala
頑張りすぎないScala
takezoe
https://d-cube.connpass.com/event/74106/
SaCSS vol.56 こんなに素敵なBrackets!
SaCSS vol.56 こんなに素敵なBrackets!
Atsushi Handa
オープンソースのエディタ、Bracketsの総括的な紹介スライドです! (2015/5/23 札幌で開催されたSaCSS Vol.56にて使用)
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ
hirotakanosato
ScalaMatsuri2016 2日目、カンファレンスLTセッションで発表した内容です。
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
Kenji Mori
ぼくのかんがえたさいきょうの Rails スタートダッシュ
Javaから見たRubyの世界
Javaから見たRubyの世界
Takafumi Yoshida
クラスメソッド会社説明会 in 北海道札幌 at smokeymonkey #cmdevio
クラスメソッド会社説明会 in 北海道札幌 at smokeymonkey #cmdevio
smokey monkey
元インフラエンジニアが Scalaを触ってつまづいたところ。
元インフラエンジニアが Scalaを触ってつまづいたところ。
takako onoue
Scala関西2017発表資料。
CSSから国民を守る党ver2
CSSから国民を守る党ver2
akatsuki 1910
CSS叩いて返り討ちになる話
MultiParadimeDesign
MultiParadimeDesign
spring_kuma
DDDrbでの発表資料です
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
Shuji Watanabe
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
おっさんES6/ES2015,React.jsを学ぶ 2016JavaScript入門 2016/11/21 @BizReach D3イベント登壇資料 最近のJavaScript動向 ・試験に出るJavaScript21年の歴史 ES6/ES2015を学ぶ ・ES6/ES2015概要 ・ES5を振り返る ・altjsの意義 Reactを学ぶ ・DOCを読む ・Tutorialをやる まとめ ・今回の学習を通じて感じたこと
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
ShogoOkazaki
Rust LT Online #6 で登壇した際の発表資料です。 イベントページ: https://rust.connpass.com/event/234637/ スライド内で紹介した記事: https://qiita.com/tsuchinoko0402/items/dda60c43dbe4e83e729d
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める
Akio Terayama
アジャイルサムライ 6章 ユーザストーリーを集めるのまとめ。
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
JJUG CCC 2014 Soringで行ったユニットテストハンズオンでの資料です。
カスタムNodeのススメ
カスタムNodeのススメ
Koichi Ota
Node-RED UG勉強会 2018 年末LTパーティのLT資料です。 https://node-red.connpass.com/event/104928/
Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点
ota42y
API Meetup Tokyo #25 AIの民主化を推進する日本のAPI提供者 ~ クラウドベンダーだけじゃない ~ https://api-meetup.doorkeeper.jp/events/72837 で発表した資料です
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
第76回Ruby関西での発表で使ったスライドです https://rubykansai.doorkeeper.jp/events/55398
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
Asami Abe
2016/01/31 ScalaMatsuri アンカンファレンス コミュニティLT 関西のScalaコミュニティ紹介
What's hot
(20)
NoNoSQL
NoNoSQL
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
頑張りすぎないScala
頑張りすぎないScala
SaCSS vol.56 こんなに素敵なBrackets!
SaCSS vol.56 こんなに素敵なBrackets!
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
Javaから見たRubyの世界
Javaから見たRubyの世界
クラスメソッド会社説明会 in 北海道札幌 at smokeymonkey #cmdevio
クラスメソッド会社説明会 in 北海道札幌 at smokeymonkey #cmdevio
元インフラエンジニアが Scalaを触ってつまづいたところ。
元インフラエンジニアが Scalaを触ってつまづいたところ。
CSSから国民を守る党ver2
CSSから国民を守る党ver2
MultiParadimeDesign
MultiParadimeDesign
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
クラスメソッド会社説明会in札幌 — メンバー紹介 #cmdevio
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
カスタムNodeのススメ
カスタムNodeのススメ
Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
Similar to Introduction of SQL Anti-pattern at Phpcon Hokkaido
リーダブルパスワード - SQLアンチパターンより抜粋 -
リーダブルパスワード - SQLアンチパターンより抜粋 -
hiro345
2015-11-28 NSEG勉強会で発表したリーダブルパスワードについての資料です。SQLアンチパターンのリーダブルパスワードについて説明をしています。発表時に使った資料にあったタイプミスなどは修正しました。
KPT発表会 - アジャイルひよこクラブ
KPT発表会 - アジャイルひよこクラブ
Atsushi Harada
2014/11/25 アジャイルひよこクラブ第3回の、現場をより良くするためにやっていることを3つの観点で振り返る「KPT発表会」のスライド。 実際にKPTをやってみてよかったこと、未解決の問題など。
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
Yuta Shimizu
川崎Ruby会議01 で発表した資料です
SQLで陥りがちなアンチパターンを知ろう「SQLアンチパターン」
SQLで陥りがちなアンチパターンを知ろう「SQLアンチパターン」
Tomotaka Suzuki(御成門プログラマー)
おすすめの技術書 LT会 2021/03/22で発表した資料です。 https://rakus.connpass.com/event/204979/
Works of site reliability engineer
Works of site reliability engineer
Shohei Kobayashi
【2/9に】Co-Edoでエンジニア・webデザイナー飲み会【肉を食す】イベントでやったLT資料です。
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
Itaru Kitagawa
D3 フロントエンド技術勉強会 2016.1.22 - 1年間まじめにSPA開発やってきた経験について - その中で、ぶつかった課題と対策 - SPA開発の全体像 - Web/JS界隈の激しい変化の波に溺れないためのTips - AngularJS と SPA の設計について - TypeScript と ES6 - Gulp タスク
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
Tomoharu ASAMI
「Reactive System Meetup in 西新宿」資料です。 http://reactive-shinjuku.connpass.com/event/17991/
Ph perがawsと出会ってdev opsを目指した話
Ph perがawsと出会ってdev opsを目指した話
Shota Umeda
PHPカンファレンス2014の資料です
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
Meiji Kimura
JustTechTalk#06でお話したスライドの公開版です。Firebird 3.0, MySQL 5.7, PostgreSQL 9.5を紹介しています。
MacroPyがすごい
MacroPyがすごい
Takashi Kawachi
MacroPy の紹介
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
Kenichi Hoshi
エンプラで培った秘伝のSQL開発手法をOSS化! オープンソースカンファレンス2017 Tokyo/Spring 2017/03/10 (金) 14:00からのフューチャーアーキテクトのセッションにおける資料です。 https://www.ospn.jp/osc2017-spring/modules/eguide/event.php?eid=27
クラウドネイティブ世代がインフラに触れるということ
クラウドネイティブ世代がインフラに触れるということ
mist_dev
DevLove + JAWS-UG中央線 の資料です
PHP&NewSQLで考える次世代アプリケーション
PHP&NewSQLで考える次世代アプリケーション
Yuuki Takezawa
PHPカンファレンス2014 CMS/DB LT slide NewSQL
AWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメする
Taichi Inaba
PHPカンファレンス2022登壇資料
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
理論から学ぶデータベース実践入門読書会スペシャルで発表した資料です。
コモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しよう
Takashi Sogabe
Presentation slide of Open Router Competition 2013 (ORC2013) Team ARMS The event is held at Interop Tokyo. http://www.interop.jp/2013/orc/
わかると楽しいInfrastructure as code
わかると楽しいInfrastructure as code
Shohei Kobayashi
Creators MeetUP Vol22で発表した資料です! 最後にサプライズあるよ! インフラをコードで説明することってなあにっていう話です!
はじめてのAWS設計でやりがちな失敗パターンまとめ
はじめてのAWS設計でやりがちな失敗パターンまとめ
Tetsunori Nishizawa
はじめてのAWS設計でやりがちな失敗パターンまとめ
ServerlessとMicroserviceの難しさに立ち向かう
ServerlessとMicroserviceの難しさに立ち向かう
ひろき こにし
20181103 JAWS FESTA 2018 OSAKA発表資料
Similar to Introduction of SQL Anti-pattern at Phpcon Hokkaido
(20)
リーダブルパスワード - SQLアンチパターンより抜粋 -
リーダブルパスワード - SQLアンチパターンより抜粋 -
KPT発表会 - アジャイルひよこクラブ
KPT発表会 - アジャイルひよこクラブ
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
SQLで陥りがちなアンチパターンを知ろう「SQLアンチパターン」
SQLで陥りがちなアンチパターンを知ろう「SQLアンチパターン」
Works of site reliability engineer
Works of site reliability engineer
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
Ph perがawsと出会ってdev opsを目指した話
Ph perがawsと出会ってdev opsを目指した話
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
MacroPyがすごい
MacroPyがすごい
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
クラウドネイティブ世代がインフラに触れるということ
クラウドネイティブ世代がインフラに触れるということ
PHP&NewSQLで考える次世代アプリケーション
PHP&NewSQLで考える次世代アプリケーション
AWS CDKに魅入られた PHPer がオススメする
AWS CDKに魅入られた PHPer がオススメする
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
コモディティL3SW/ルータでオープンなSDNを実現しよう
コモディティL3SW/ルータでオープンなSDNを実現しよう
わかると楽しいInfrastructure as code
わかると楽しいInfrastructure as code
はじめてのAWS設計でやりがちな失敗パターンまとめ
はじめてのAWS設計でやりがちな失敗パターンまとめ
ServerlessとMicroserviceの難しさに立ち向かう
ServerlessとMicroserviceの難しさに立ち向かう
Introduction of SQL Anti-pattern at Phpcon Hokkaido
1.
必読名著 SQLアンチパターンの紹介 + とあるOSSの闇 PHPカンファレンス北海道2019 株式会社ゆめみ 川井健太 !1
2.
プロフィール • 川井健太(Qiita ID
= Mister_K) • 株式会社ゆめみ サーバーサイドエンジニア • Laravel, AWS, Serverless, 木材 とかで開発してます • 趣味は沢山。バイクに乗ります。 !2
3.
この発表は…… • QiitaでちょっとバズったSQLアンチパターンの解説です • どちらかというとDB設計初学者向けです •
名著SQLアンチパターンを例を用いて一部解説します • 実例を用いて設計の大切さを伝えます !3
4.
!4
5.
発表概要 • SQLアンチパターンとは? • 見るに耐えないER図の紹介 •
アンチパターンの紹介 • アンチパターンを回避しよう • とあるOSSに潜むアンチパターン • 究極のアンチパターンとは !5
6.
SQLアンチパターンとは? 設計者が良かれと思って施した設計が 裏目に出て酷い目に合うパターン !6
7.
!7
8.
とある債務管理システム ざっくりとした要件として 1. 債務者を登録でき、プロフィールを入力できる。 2. 債務者の家族構成を登録でき、そのプロフィールを入力できる。 3.
連帯保証人を登録でき、そのプロフィールを入力できる。 4. 取り立て人が債務者に借金の回収に行って、それを記録できる 5. 債務者の借金を管理できる。 6. 債務者の返済状況を管理できる。 7. 債務者、家族、連帯保証人をブラックリストで管理できる。 !8
9.
!9 とある 空想上の 債務者 管理 システム
10.
ジェイウォーク(信号無視) 目的:複数の値を持つ属性を格納する !10 カンマ区切りのリストを格納する
11.
!11 とある 空想上の 債務者 管理 システム
12.
やってしまった事 • debtors.families に
families.id を カンマ区切りで入れて関連させている • これにより債務者に複数の家族を設定できるようにした !12 id … families 1 … 1,2,3 2 … 4,5 3 … 6,7 debtorsテーブルのレコード
13.
どうなるのか? • 家族を追加するたびに debtors
のレコードを更新する必 要が出てしまう • プログラムのバグにより、重複が発生する可能性がある • JOIN句が複雑になる(正規表現が必要&インデックス無効) !13
14.
Entity Attribute Value 目的:可変属性をサポートする !14 Key:Valueの汎用的な属性テーブルを使用する
15.
!15 とある 空想上の 債務者 管理 システム
16.
やってしまった事 • debtor の属性を汎用的にするため、profiles
に Key:Valueで値をストアするようにした !16 id key Value 1 is_dead 0 2 middle_name John
17.
どうなるのか? • SQLで用意したデータ制約が利用できなくなる よって値の整合性はコードで保障せねばならない • 例えばNOT
NULL制約も使えない !17
18.
ナイーブツリー 目的:階層構造を格納し、クエリを実行する !18 常に親のみに依存する
19.
!19 とある 空想上の 債務者 管理 システム
20.
やってしまった事 • 連帯保証人を定義するため debtors.joint_garantor_id を定義した •
これに debtors.id を入れる事で、債務者と連帯保証人の 関係を定義できるようにした !20
21.
どうなるのか • RDBMSによっては、 クエリの長さが拾う階層分だけ長くなってしまう !21 SELECT d1.*
d2.*, d3.* FROM debtors c1 LEFT OUTER JOIN debtors c2 ON c2.joint_garantor_id = c1.joint_garantor_id LEFT OUTER JOIN debtors c3 ON c3.joint_garantor_id = c2.joint_garantor_id 3階層まで拾う場合のクエリ
22.
どうなるのか?! • RDBMSによってはメンテナンスが大変 外部キー制約がある場合は簡単にノードを削除できない !22 Debtor Id =
1 Debtor Id = 2 parent = 1 外部キー制約があると削除できないし、 ノードの昇格も難しい
23.
アンチパターンの例外 • 共通テーブル式を用いた再帰クエリの使えるRDBMSであ れば問題ない • 例として •
MySQL 8.0以上 • PostgreSQL 8.4以上 !23
24.
IDリクワイアド 目的:主キーの規約を確立する !24 全てのテーブルに id 列を用いる
25.
!25 とある 空想上の 債務者 管理 システム
26.
やってしまった事 • 全てのテーブルに id
カラムを用意した !26
27.
どうなるのか • 冗長となる場合がある • 重複行を許可してしまう場合がある •
キーの意味がわからなくなる 例えばJOIN したらどっちの id だかわからない !27
28.
ポリモーフィック関連 目的:複数の親テーブルを参照する !28 二重目的の外部キーを使用する
29.
!29 とある 空想上の 債務者 管理 システム
30.
やってしまった事 • ブラックリストで債務者とその家族を管理したい • だから
blacklist.debtor_family_id には debtors.id, families.idのいずれかが入るようにした !30 Id debtor_family_id 1 24(debtors の id) 2 24(families の id)
31.
どうなるのか • 外部キー制約、つまり参照整合性制約を定義できない • 誤って参照先の存在しないブラックリストのレコードがで きてしまうかも。 •
外部キー制約なんて邪魔? それこそアンチパターンの一つ! !31
32.
アンチパターンを回避しよう !32
33.
!33 リファクタリング後のER図
34.
ポリモーフィック関連回避 • 共通の親テーブルを作成する 例:debtor の親クラスを作り、それをブラックリスト に追加する。 !34 債務者 •
人物id 人物
35.
!35 今回は人物エンティティ に統一した 連帯保証人は契約単位で 設定されるので、別にテー ブルを用意して人物を関 連づけた
36.
ナイーブツリー回避 • 共通テーブル式を指定する再起クエリを利用できる RDBMSを用いる • 代替ツリーモデルを使用する 経路列挙 ディレクトリ構造を記録するカラムを追加する。 入れ子集合 子孫の集合に関する情報を各ノードに格納する。 閉包テーブル エンティティの親子関係を定義する別のテーブルを用意。 詳しいことは本を見てくれ! !36
37.
ジェイウォーク回避 • 交差(関連、中間)テーブルを作成する !37 familie Id =
2 debtor Id = 3 closs_table debtor_id = 3 familie_id = 2
38.
!38 家族関係の交差 テーブルを作成した。 同時にナイーブツリーの 回避も行なった。
39.
EAV回避 • 要件を絞る とりあえず拡張できるようにするには犠牲を伴うため • サブタイプのモデリングを行う •
JSON型を用いる !39
40.
!40 債務者 • Id • Name •
Address 低評価債務者 • has_bunkrupt 特別債務者 • is_richmen 要件を確定し、 債務者を3パターンに分ける SELECT するときはサブテー ブルを JOIN して用いる やはり要件は絞る必要がある サブタイプモデリング
41.
!41 要件を整理して 項目を絞った
42.
idリクワイアド回避 • 複合ユニークキーを用いる • テーブル名_id
と言うように名前をつける !42
43.
!43 person_to, person_from 複合主キーを定義
44.
ここからは PHPに関係するお話 !44
45.
この世には 多くの人に使われる 闇を抱えしOSSが存在する !45
46.
!46
47.
WordPressとは • オープンソースのブログソフトウェア ウェブサイトのCMSとしても使われる • SEOに最適化されている点でとても強い 34%のウェブサイトがWordPress製らしい(公式より) •
2003年に最初のバージョンが世に出た !47
48.
!48 WordPressの ER図 (v4.9時点)
49.
!49 EAVが使われている!
50.
何故EAVを使ったのか考察 • 最初にWordPressを作った人が、とりあえずEAVを使っ た。 • 2003年当時、json型はなかった。 •
SQLアンチパターンの初版が2010年なので、認知もさ れていなかっただろう。 !50
51.
何故EAVを使ったのか考察 • WordPressがウケたが、既にデータはストアされていて 手を出せなくなっていた。 • 自社でソース・データベースを管理していたら改善はでき ただろうが、WordPressは世界中で動きすぎた。 •
スキーマをメタテーブルで管理する地獄もある !51
52.
WordPressから学べる事 • とりあえず世に出すことは大切 • でもデータベースはちょっと考えろ! ウケた時どうなっても知らんぞ! •
究極、ソースは後からどうにでもなる データベースは容易に変更できない !52
53.
究極のアンチパターンとは 将来的な変更や アンチパターンを意識せず 適当に設計をすること !53
54.
!54 https://www.satofull.jp/static/oenkifu/201909_typhoon_15.php さとふる にて募金を受け付けています ご静聴ありがとうございました
Download now