SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
自己紹介自己紹介
とみたまさひろ
得意技
Ruby
MySQL
文字化け
好きなO/Rマッパーは Sequel
������������������������������������問題
1
SQLの嫌いなところSQLの嫌いなところ
英語っぽい
コンピュータで扱う言語っぽくない
予約語が多い
カラム名に「group」が使えなくて死ぬ
余計な単語
INSERT INTO, GROUP BY
2
英語だからみんな騙されてるけど英語だからみんな騙されてるけど
日本語だったら「ぴゅう太」日本語だったら「ぴゅう太」
みたいなもんだからなみたいなもんだからな
3
お前の罪を数えろお前の罪を数えろ
NSEG #96 (お、丸8年では?)
2018/01/27
とみたまさひろ
4
SQLアンチパターンを読んだ感想SQLアンチパターンを読んだ感想
5
「あー、あるある」「あー、あるある」
6
数えてみよう数えてみよう
7
ジェイウォークジェイウォーク
1カラムに複数の値を格納する
8
やったやった
「a,b,c」とするのはシロウト
「,a,b,c,」としておくと
LIKE '%,値,%' で検索できて便利
9
ナイーブツリーナイーブツリー
子が親IDを参照するツリー構造
10
ふつーにやる
そもそもツリー構造をRDBで表現するのが負け
同じ負けなら単純な方がいい
そういえばMySQLも8から再帰クエリ書けますね
Nested Set はやりすぎ感
http://tmtms.hatenablog.com/entry/20110223
/redmine
11
IDリクワイドIDリクワイド
すべてのテーブルに「id」列を用いる
12
よくやった
userテーブルのidカラムは user.id と書けていい感じ
user.user_id はなんか冗長
全体でカラム名を一意にした方がいいような気もする
13
キーレスエントリキーレスエントリ
外部キー制約を使用しない
14
え? MySQLをdisってんの?
初期のMySQLには外部キーなんてなかったんですよ
消す時に順番に気をつけないとエラーになるし
PostgreSQL だと何か方法あった気もする
15
エンティティ・アトリビュート・エンティティ・アトリビュート・
バリューバリュー
汎用的な属性テーブルを使用する汎用的な属性テーブルを使用する
名前カラムと値カラムみたいなやつ
16
ごめんなさい
値の型ごとにテーブルを用意する
くらいはしてもよかった
実はJSONでもいいかも
17
ポリモーフィック関連ポリモーフィック関連
二重目的の外部キーを使用する二重目的の外部キーを使用する
18
たぶんやってない…と思う
19
マルチカラムアトリビュートマルチカラムアトリビュート
複数の列を定義する複数の列を定義する
tag1, tag2, tag3 カラムみたいなやつ
20
たぶんやってない…と思う
21
メタデータトリブルメタデータトリブル
テーブルや列をコピーするテーブルや列をコピーする
行数の多いテーブルを分割するとか
22
諸般の事情によりやってました
つらい
23
ラウンディングエラーラウンディングエラー
FLOATデータ型を使用するFLOATデータ型を使用する
24
残念ながら使う機会がなかった
25
サーティワンフレーバーサーティワンフレーバー
限定する値を列定義で指定する限定する値を列定義で指定する
MySQLでENUM使ったり
CHECK制約で値のリストを指定したり
26
使ったことはある
そんなに悪くなかったような…
27
ファントムファイルファントムファイル
大きなデータをファイルで管理大きなデータをファイルで管理
28
やってる
ふつうやりますよね?
まあつらいこともあるけど
29
インデックスショットガンインデックスショットガン
闇雲にインデックスを使用する闇雲にインデックスを使用する
30
たぶんやってない
31
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
col=NULL とか func(NULL) とかcol=NULL とか func(NULL) とか
32
ふつうはやらない
33
アンビギュアスグループアンビギュアスグループ
非グループ化列を参照する非グループ化列を参照する
SELECT col1 ... GROUP BY col2 とか
34
やってた
たぶんMySQL以外はエラーになる
意外と便利
https://twitter.com/tmtms/status
/846254316797095936
35
ランダムセレクションランダムセレクション
データをランダムにソートするデータをランダムにソートする
36
自分はやらないけどそういう要求があった場合はむずか
しいですね
37
プアマンス・サーチエンジンプアマンス・サーチエンジン
LIKE '%文字列%'LIKE '%文字列%' で全文検索で全文検索
38
やるやる
お手軽なのでおすすめ ���
PostgreSQLは何かの仕組みで LIKE '%文字列%' でも
インデックスを効かせることができたような
39
スパゲティクエリスパゲティクエリ
複雑で長いクエリ複雑で長いクエリ
40
SQL力が低くて複雑なクエリは書けません
41
インプリシットカラムインプリシットカラム
SELECT *SELECT *
42
プログラム中ではふつうは書かない
手作業では使う
43
リーダブルパスワードリーダブルパスワード
パスワードを平文で格納するパスワードを平文で格納する
44
昔やりました ごめんなさい
今は平文で格納することはないけど
ハッシュ値じゃなくて復号可能な暗号にすることもある
45
SQLインジェクションSQLインジェクション
未検証の入力をコードとして実行する未検証の入力をコードとして実行する
46
O/Rマッパー使いましょう
47
シュードキー・ニートフリークシュードキー・ニートフリーク
隙間を埋める隙間を埋める
偉い順にIPアドレスを振るみたいな?
48
人目に触れるものをキーとしては
つかわない方がいいですね
49
シー・ノー・エビルシー・ノー・エビル
肝心な部分を見逃す肝心な部分を見逃す
例外機構がない言語でエラーチェックしてない
50
そんな人いる?
例外を隠蔽するプログラムは見たことある
51
ディプロマティックディプロマティック
イミュニティイミュニティ
SQLを特別扱いするSQLを特別扱いする
プログラムを管理するようにはSQLを管理してない
52
文書化はしてない
ER図は必要になった時にツールで生成すればよくね?
Railsのマイグレーションの仕組みはすばらしい
53
マジックビーンズマジックビーンズ
モデルがアクティブレコードそのものモデルがアクティブレコードそのもの
54
あるある
55
砂の城砂の城
想定不足想定不足
サービス継続・運用の話
56
運用してないからパス
57
結果結果
58
13 / 2513 / 25
59
過半数 ���
60
おまけおまけ
61
アンチパターンを考えてみたアンチパターンを考えてみた
62
ソーリーソーリー
ジャパニーズ・オンリージャパニーズ・オンリー
63
日本語テーブル名/カラム名日本語テーブル名/カラム名
64
英語 日本語
created_at 作成日時
user_name 利用者名
65
あれ?わかりやすいあれ?わかりやすい
66
文字数も少なくてすむし文字数も少なくてすむし
67
入力は面倒だがエディタやIDEが入力は面倒だがエディタやIDEが
きっとなんとかしてくれるきっとなんとかしてくれる
68
情報処理推進機構(IPA)も推奨(?)情報処理推進機構(IPA)も推奨(?)
情報処理試験データベースで日本語テーブル名と日本語
カラム名のクエリを手で書かされた記憶が…
SELECT 顧客名, 会社名 FROM 顧客管理台帳
LFET JOIN 会社管理台帳 USING 会社識別番号
WHERE 顧客住所 ...
69
業務用語をそのまま使える業務用語をそのまま使える
70
アンチパターン…? ������
71
実は結構よいのでは実は結構よいのでは
72
おわりおわり
73

Contenu connexe

Plus de Masahiro Tomita

MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版Masahiro Tomita
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情Masahiro Tomita
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャルMasahiro Tomita
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトMasahiro Tomita
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 
MySQLのプロトコル解説
MySQLのプロトコル解説MySQLのプロトコル解説
MySQLのプロトコル解説Masahiro Tomita
 
Dockerイメージを作る
Dockerイメージを作るDockerイメージを作る
Dockerイメージを作るMasahiro Tomita
 
Dockerさわってみた
DockerさわってみたDockerさわってみた
DockerさわってみたMasahiro Tomita
 

Plus de Masahiro Tomita (20)

MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
 
Ruby24
Ruby24Ruby24
Ruby24
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
MySQLを拡張する
MySQLを拡張するMySQLを拡張する
MySQLを拡張する
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
 
MyNAができるまで
MyNAができるまでMyNAができるまで
MyNAができるまで
 
文字化け
文字化け文字化け
文字化け
 
Crystal
CrystalCrystal
Crystal
 
メールの暗号化
メールの暗号化メールの暗号化
メールの暗号化
 
文字化け
文字化け文字化け
文字化け
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライト
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 
Sequelのすすめ
SequelのすすめSequelのすすめ
Sequelのすすめ
 
MySQLのプロトコル解説
MySQLのプロトコル解説MySQLのプロトコル解説
MySQLのプロトコル解説
 
Dockerイメージを作る
Dockerイメージを作るDockerイメージを作る
Dockerイメージを作る
 
Dockerさわってみた
DockerさわってみたDockerさわってみた
Dockerさわってみた
 
Nseg49 mysql
Nseg49 mysqlNseg49 mysql
Nseg49 mysql
 

Dernier

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Dernier (9)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

お前の罪を数えろ