#269 SQLアンチパターン逆コンパイル大会

2024/7/28 ·

  • この番組は駆け出しエンジニアのじゅんぺいが先輩エンジニアのかいちのりとともにレベルアップしていくメンタリングのぞき見ラジオでございます遊んできたはいはい遊んでますねということで今日僕はですねある企画を持ってまいりました何ですかSQLアンチパターン逆コンパイルということでですねコンパイルなんだはい



  • えーやだーなんかはいあのー皆さんSQLアンチパターンという本はご存知でしょうか知ってます知ってますそうこれ有名な本ですよねはい



  • やったことないですやったことないです?持ってるんですけどねそうですね 今 順平くんの家にいるんですけどありますよね 遊びに積んでありますそうなんだしっかり積まれてて今日はですね まずどんな本かっていうとSQLってあるんですけどリレーショナルデータベースに関係する論理設計とか物理設計とかクエリとかアプリケーション開発に関するアンチパターンを広くまとめてますよっていう



  • パターン集ですねこれのすごいところはですね本当にデータベースをちょっとだけ勉強した状態でデータベースを触るとうっかりやってしまうようなパターンがですねなんでダメなのかっていうところもしっかり解説込みで紹介してくれているので素晴らしい素晴らしいんですよ



  • 中級エンジニアになるためにはちょっと必須なんじゃないかなという内容しかも難易度もですねこれ実はそんな高くないそうなんですか多分1年目とか2年目で読んでも全然わかると思いますねさすがにSQLは触ったことあるぐらいの感じじゃないと基本的なのは知ってるぐらいのレベルじゃないとって感じですよねそうですねテーブル作ってクエリかけて



  • アプリケーションのデータベース見たことあるとか簡単なSNSみたいなの作ったことあるっていう人だったら吸収できるんじゃないかなっていう本になってますそしてパターンというのはですね世の中に繰り返し出てきたあのー



  • 解決方法に名前を付けたものとよく言われてるんですけれどもこのアンチパターンというのはやってしまいがちなダメなパターンのことですねそれについて名前を付けてるんですけど今回は逆にそのアンチパターンの名前から



  • どんなアンチパターンなの?っていうのを推測してもらおうという逆コンパイル企画でございますなるほどー激ムズーこれねなのかな?やったことないし読んだことないからどうなんすかね想像つかないわえっとで今回あのー



  • 個人的にはこのSQLアンチパターン特に大事なやつがあるよねっていうのはあるんですけど今回どっちかっていうと名前取り分で持ってきました面白ネーミングが出てくるんですね面白ネーミングというかこれならギリギリ逆に推論できるんじゃないかっていうやつを持ってきましたなので中にはですねこれ再現不可能でしょみたいなやつあるんですよ



  • EAVパターンとかすごいよくありがちなんですけどもうそんなの無理じゃんっていうのがあるんですが今回はですねその中から名前から想像しやすいやつを持ってきておりますありがとうございますいやーじゅんぺんこれ試されてるよかなりできる問題来ちゃってるからできないの恥ずかしいわ名前からわかる問題なんでただ名前からわかると言っても



  • まあ推測不可能ではないなっていうレベルから 持った方がいいかもしれないですねOKですOKですお任せくださいいやー頑張ろう逆コンパイルはい全然自信ないわぜひじゃあ第1問目からいきますよ早速はい1問目これはアプリケーション開発に関する アンチパターンですねはいリーダブルパスワードリーダブルパスワードリーダブルパスワードというパターンでございます



  • SQLのアンチパターンですよねSQLというかこれはアプリケーション開発全般的に関係あるかもしれないですこれはなんかいっぱい答えていいやつですかそれでいく早押しスタイルでいくかこれ多分数打った方が楽しいと思うこの企画ははいじゃあカイチ君1234とかパスワードみたいなよくあるパスワードを



  • データベースのパスワードに設定してしまう残念多分それだとリーダブルではないかなというか推測しやすいんですけどこれは本当にリーダブルってところが結構ポイントですね全然分かんない分かったーでももうお手つきしたからと言えねーじゃあ回答権今じゅんぺいくんにやります強制的にかいさんが今仕組んできたえー



  • マジで分かんないリーダブル読めてしまうんですよねパスワードがなんか知らんすけどパスワードを第三者が



  • 引っ張ってこれてしまうちょっと致命的すぎます読めちゃうかなとちょっとね致命的すぎますそうですねざっくりすぎて合ってるっちゃ合ってるんですけどちょっと致命的すぎるからもうちょっとピンポンピンポンはいカイチくん



  • パスワードをDBに保存するときにファッシュとか暗号化しないで保存しちゃう正解ですその通りでございますそうですねDWそういうことですねDWそういうことです言われてみれば答えられたかもしれないですねいやそうこれは推測可能じゃないですか



  • これの問題点はですね途中の通信盗聴されたらアウトだよねとかあとはそもそも開発者ならこれ見えちゃうよねっていうことが起きるんですよ開発者が見えたらパスワードなんてね一般の人たちはよく同じパスワードを使い回してたりするんでそれ見えちゃアウトだよねってことで解決策としてはパスワードはちゃんとハッシュ化して保存しましょうっていう



  • 平文で保存しちゃいけないよっていうことですね割とねフレームワークがよしなにやってくれますよねそうですねフレームワーク使ってれば保存するときにだいたいやってくれるはずはいということでかいちくん1ポイントですよっしゃ一歩リードじゃあ第2問いきますよ第2問ラウンディングエラーラウンディングエラー一応これ分類的には物理設計のアンチパターンに分類されてたんですけど



  • ちょっと自分がイメージしてるような物理設計っていうよりはなんかRDBの仕様みたいな感じでしたね全然わからないですけどちなみに物理設計って具体的にどういう話ですか僕の中の物理設計のイメージは本当になんだろうこのデータベースだいたいこれぐらいの期間でこれぐらいのデータ量保存するからなんかこれぐらいのストレージ必要だよねみたいなそういうのを設計するイメージだったんですけどそんなこともないですか



  • 詳しくないですよく知りませんじゃあこれは後日解説しますね質問いいですかエラーですかちゃんとエラーなんですけどエラーメッセージは出ないと思いますそうやったことないかもただ問題は起きますこれはいカイチ君親子テーブルあるじゃないですか1対1とか1対他とかはい



  • この3章が3つとかで循環して構造的にできない設計になっちゃってるよっていう状態このラウンディングエラーとはちょっと違いますねそっか何ですかねラウンディングこれでもねむずいかもいやでもじゅんぺいはいけるかもしれない次は僕の番ですからねこれねじゅんぺいのターンこれやらなかったらヒントもらいましょう



  • ラウンディングしちゃってるんだもんなラウンディングピンポーン早押し得意ね早く押すのだけが得意なやつとりあえず押す全然わかんないななんかエラーがラウンドしちゃってて画面にはSQLは実行できちゃうんだけど画面には



  • エラーとか出てこなくて気づかないパターン何が分かったか分かんないヒントタイムとりあえずもらっておきますとりあえずこのラウンディングエラーの日本語名もあって日本語名が結構答えに近いんですけど丸目誤差という意味ですねそうですよねではかいちくん大きい数字とか小数とか使ってるときに



  • 桁落ちが発生して思ってる数字じゃなくなるようになってしまっているこれはね正解です正解というか特に小数の方ですねこの本で紹介されているのは



  • ここのラウンディングエラーというアンチパターンはですねフロート型を使うことがそもそもアンチパターンというこれの問題点はですね10進数の小数って2進数にすると表せないものが存在するんですねありますよね丸め誤差っていうのが発生して計算すると結果変わっちゃうっていう



  • なるほどなので正確な数値計算が必要な時のデータとかは特にフロート型を使ってはいけないんですよこれ解決策はですねすごいシンプルですディシマルとかナンバーっていう型があるんですけどそっちを使いましょうっていうなるほどいつも思うんですけどじゃあフロートっていつ使うのって思ってますですよね僕も気になって調べました



  • 結論ほとんど使わなくていいんじゃないかなって感じなんですけど桁数がめちゃくちゃ多い場合はフロートじゃないと扱えないケースがあるらしいなんだそれ本当かいなディシマルの限界の桁数があるらしいんでこれを超えるような場合とかはフロートじゃないとそもそも入らないっていうデータが



  • っていうことはあるらしいんですけどとはいえ64桁とか対応してるんで大丈夫じゃねっていう大体の場合はなのでほとんどの場合はフロートじゃなくて良いんじゃないかなと思ってますなるほど



  • いやー答えれたなこれいけましたねいけたこれいけましたねいけたこれいけたな昔の機械学習やってる時の記憶が出てきたんですよあれなんかラウンディングって丸め車5人とかそういうのだった気がするってなって日本語を正確に読み解けるかっていうのも大事ですね英語力もうちょっとでした足んなかったじゃあ第3問いきますかはいお願いします続いて



  • インデックスショットガンかっこいいかっこいいこれはねその名の通りインデックスに関するアンチパターンですねもしかしたらこれは知識が必要かもしれないなるほどはい答えておきますはいカイチ君まずショットガンショットガンってイメージ三弾銃みたいな感じで一発出るっていうよりは複数の弾がドカーンって出るイメージがあるんですようんうんうん



  • なのでユニークじゃないインデックスになっちゃってる複合機とかわかんないですけどえーっとねショットガンの着眼点はいいんですけどちょっと違いますわかりましたあとなんだろうな



  • ショットガンがそんなに馴染みないんですよ日本人ショットガンは確かに日本人に馴染みないんですけどさっきのカイチが持ってたイメージは多分このパターン名に合ってると思うなるほどよかったゴールデンアイの知識なんでショットガン懐かしい64じゃんいや分かんない30超えてないと分かんない多分そうかインデックスがショットガン



  • ピンポンインデックスが結局こいつとしか組み合わさらんやんみたいなインデックスになっているどういうことちょっと今のなしです今のなしになりました今のはもはやカットするかもしれないカットまでいくんだずるいなこいつの戦略わかるかもわかったかもけどヒント聞いとく



  • これヒントの出し方むずいなじゃあ答えておいていいですかはいじゃあじゅんぺくんは今のでお手つきなんでかんちくんお願いします一つのテーブルのインデックス複合キーなのかながめっちゃ多いこれはね正解と言っていいんじゃないでしょうか正解ですねよしえーとですねこれ回答例としてはむやみにインデックスを張りまくることですね



  • これなんでダメかっていうとインデックスって検索早くするために使うじゃないですかなんですけどこれって確かに検索早くしつつも問題点としては更新時のパフォーマンスとかが落ちるんですよ



  • なぜならインデックスって要は目次みたいなもんじゃないですかなのでデータが更新されたときに目次も一緒に更新しなきゃいけないんでインデックスがいっぱいあるイコール目次がいっぱいあるつまり更新するときにより負荷がかかっちゃうんですねっていうのであんまり意味のないインデックス



  • インデックスをたくさん貼ってもパフォーマンス落ちてしまうのでちゃんと考えてインデックス貼りましょうねっていうのがこのアンチパターンですねこれいけましたねいけたんかい全部いけてるやんこれでインデックスのちゃんとした貼り方みたいなやつ



  • 一応フレームワークみたいなやつはこの本に書かれてるんですけどしっかりやれるようになるためにはちょっと別の書籍が必要かなって感じではあるのでそこはちょっとインデックスの勉強を別でした方がいいかなって感じですかねDBのパフォーマンス出ないなってなった時だいたいインデックス貼れば解決するイメージがあってうんうんうんうん



  • 業務僕が触れてきた世界レベルの話なんですけどとはいえ多分のりさんが言ってた通りむやみにやっちゃうとパフォーマンス落ちるのはその通りでぶっちゃけどしたらいいかよく知らないんですよねだからそのあたりはSQLアンチパターンというよりは別の本



  • 勉強する感じになるんですかねそうですね僕が今まで読んだ中でインデックスについて書かれてたのはちょっと古めの本なんですけどハイパフォーマンスマイSQLってやつとかは結構インデックスについてちゃんと書かれててこうやって考えるんだってのはありましたね



  • 普通に需要めっちゃありそうエピソードとしてただねゴツボンだねあれは結構あーゴツいんだーコジエンぐらいあるかもゴツいなマジですごい深奥エスキュールコジエンぐらいはないかコジエンぐらいはないけど豆腐ボンなんですね結構な豆腐ボンですねあれはハリーポッターとかのさ



  • 魔術章みたいなそれぐらいの感じまあまあ確かに結構50円ぐらいですねっていうのがインデックスショットガンでしたなるほどあと何問ぐらいあります?いっぱいあるんですけど時間を見て決めようかなと思ってますまだ20分ぐらいですねじゃあまだまだいきますよ続いてはい



  • フィアオブジアンノーンフィアオブジアンノーンもう一度ねフィアオブジアンノーンフィアってなんだFEARですかフィアはこれは最初にちょっと訳も言っちゃいます日本語のフィアは恐怖ですねこれはアンノーン不明の恐怖っていうアンチパターンかこれはね



  • 大事な知識がね入ってる大事なエッセンスが入ってる面白じゃないですね面白ではある気がするなでもUnknownといえばUnknownといえばFear of the unknownですかThe unknownですThe unknownなんだちなみにこれはクエリに関係するアンチパターンですねSQLとかで



  • 最初書いてるとハマりがちなポイントかもしれないうわーわかるんだろうなピンポンおーじゅんぺーきましたテーブルを削ごしすぎてどのデータ持ってくるか持ってきたいかも第三者が見たらよくわかんなくなっちゃってる怖いっていうやつあーまあなんかはい



  • アンチパターンとしてはしさがあったけど違いますそういう能力の問題じゃないですかわからないことに対しては恐れすぎて色々やって複雑になる的な話なのかなって思うんですけど



  • 今ちなみにじゅんぺいくんお手つきしたんでかいちくんのターンになっておりますそうですよね2人しかいないのでお手つきルールあるのえぐい確かに数打ってもいい気がするけどはいかいちくんテーブルを分けないなので正規化しない残念ただそのアンチパターンも別であります



  • それありますよね一周終わったのでヒントタイムいきますかまずこのアンノーンとはヌルのことですヌルへの恐怖はいはいヌル許容しないテーブルになってる三角もう一歩だから何かそれも



  • この中の問題点の1個みたいな感じですねもっとなんか一般的なことを言ってますここでは一般的なことこれはじゅんぺいいけちゃうんじゃないか一般的なこと一般的なこともっとふわっとしてるというか抽象的というかヌルを許容しないテーブルになっているよりも一般的なこと抽象的なことっていうか複合してるかもしれないいろんな要素が



  • さっきカイチが言ったようなこととかなんかいろんなものがあった上でそれをアンチパターンとしているかもしれないそれも一つってことですねわかるよこのなんか出さなきゃいけないけど何も出せない感じヌルを許容しないよりも抽象的ってアンノンはヌルのことなんですよねアンノンはヌルのことですヌルのお話ですよねそしたらヌルのお話このアンチパターンはヌルのお話で



  • 気づかぬうちにピンポン気づかぬうちに気づかぬうちに気づかぬうちにぬるが入ってしまうでもそのテーブルはぬるを許容していないのでダメそんなことは起きませんそのテーブルがぬるを許容していないのであれば起きませんわかんなすぎた



  • えっとピンポンはいカイチ君なんかちょっと抽象化の方向あってる感じですけどヌルを恐れるがあまりいい感じのテーブル設計にならないいろんなものを包括していること抽象的だ抽象的だ方向がちょっと違うかもしれないあーそっかさっきのカイチの回答の



  • なんでしょうヌルを許容しないのになってるっていうのと別種の類のヌルに関するやつがいくつか集まってるうんそっちかうわヌルなんかあるか他なのでヌルの何が良くないかが分かれば一旦回答としてはいいかもしれないヌルが良くない知識がないかもしれないヌルの何が良くないかなんか空文字とかよりも良くない



  • から良くないやつ良くないやつじゃないですかヌルそうねピンポーンヌルってゼロとかフォルスとか空文字とかよりも悪いやつなイメージがあるんですよなんかシステムに影響を及ぼすやつだからそういう悪いやつが気づいたら入り込んじゃってるっていう恐怖



  • そこが具体化できたら丸だったなじゃあはいかいちくんヌルが文字の型の例えばイントとかゼロストリングで言うと空文字みたいに比べると情報量が少ないからヌルよりもゼロとか空文字使った方がいいよねみたいな話うわー



  • 惜しいほぼ正解いいかな一旦じゃあこれはかゆちくんにポイントを授けようかなって感じなんですけど4-0とかなんだなこれはですねまずアンチパターンとしてはヌルを一般的な値のように使ってしまうっていうのがこのアンチパターンのざっくりした回答になってますそのアンチパターンの回答でヌルへの恐怖っていう名前



  • ちょっと納得いかんな塗るがここは入ってもOKっていうぐらいの気持ちで塗る入れてるみたいな塗るって別に塗るが入るのは良くてただ塗るをその他の値と同じように扱ってしまうのは恐怖を感じた方がいいよっていうパターンですじゃあ塗るってそもそもどういう意味なのかってちなみにご存知ですかそれがさっき言ったぐらいのイメージですねゼロとかよりも



  • ちょっともうちょっと悪いやつ間違えるのを恐れずに言うと何も参照してないとかですかえっとですねいやそういう空っぽ的なヌルポインターを参照してるヌルポインターを参照してるはC言語でのやつじゃないえっとですねこのデータベースにおけるヌルっていうのはですね明確な意味があって不明って意味なんですねこれうん



  • なんか腹立ちますね明確に不明っていう意味なのは不明やんけって思う不明なんです明確にほうなのでこれ他の値と同じように使うと問題が起きるケースがあってですね例えば補修号何々じゃないノットで検索するケース例えばじゃあIDが10うん



  • じゃないやつを探そうってなった時に他の列にヌルの値があるとヌルって10じゃないように思えるじゃないですかなんですけど実はヌルって不明だから10かもしれないんですよそういう扱いになるんだそうなので補修号で検索しても引っかかんなかったりするんですね知らなかったとか逆にイコールで検索した時



  • イコールヌルでやってもヌルって不明だから不明な値と一致してるかどうかって分かんないじゃないですかなのでイコールでも出てこないんですよへーだからヌルって検索するときあのisヌルみたいなキーワード使ってやると思うんですけど不明かどうかは分かるんですよなるほど



  • だからちょっと他の値と扱い方が変わってしまうのでそれを同じように扱ってしまうと問題がいろいろ起きる可能性がありますよっていうことでこれを一般的な値と思って使うのはダメだよっていうなるほど面白い逆にヌルを嫌いすぎて使わないっていう派閥もいるんですけどそれもそれでダメだよって言ってますね



  • ちゃんとヌルがどういう特殊な値なのかっていうのをしっかり把握して適切に使いましょうねっていうのがここのフィアオブジアンノーンの言ってることですねこれはちょっと分かんなかったですねこれねヌルについて深く考えたことがある人じゃないと難しいかもしれない



  • 面白いへー正直そんなに深く考えて使ってこなかったかもしれないアプリケーションを設計する上であいらないことあるかなあるよしじゃあヌル許容しようみたいなできるだけ許容しないようにしようとはしてましたけどそこはそれでOKでそれをクエリで使うときに



  • 普通の値と同じように使っちゃいけないよっていう感じかなここはORマッパー使ってればそんなに心配しなくていいみたいな感じですかねそうだね結局多分ORマッパーだとウェアヌールみたいなメソッドがあってそこでヨシナに変換してくれてるんでちゃんとした扱いには変換されてるはずってことですよねやっぱなんか



  • 終わるマップは便利ですけど音質とダッチ感がありますね音質とダッチ感ねあるかもしれんなそれはうん勉強になったはいはいありがとうございますじゃあこれにしましょうかね続いてのアンチパターンはいマルチカラムアトリビュートマルチカラムアトリビュートはい



  • なんかそのままそうだぞ結構そのままな感じするかもじゃあピンポンジャンピンポンジャンピンポンジャンピンポンジャンピンポンさんじゃあお願いしますめっちゃアトリビュートがあるので一つのIDに対してめっちゃカラムが用意しすぎてしまうからつまりあれそういうことでもないかつまりカラムが多いってことですかカラムが多いってことです



  • 残念ですよね穴勝ち間違いではないんですけどもうちょっと例えばですけどそれ必要なら必要じゃないですかただ必要ならそれ必要なのでアンチパターンじゃないですっていうでもお手つきしたんでどれだどれだろうどれだろうってなるかもしれんどれだ



  • ピンポンはいカイチくんマルチカラムなんで本当はだからあれだ単一責務的な話で一つのテーブルで複数の情報を持っちゃってることちなみに具体例はあります?それですよねユーザーとそのユーザーが買ったものが一つのテーブルに入ってるみたいなうわーちょっと違うかも



  • じゃあちょっと違うわじゃあちょっとヒントいくと今カイチの回答非常に惜しいんですけどユーザーの情報だけで起きる起きうるなるほどピンポーンじゅんぺい先に押しとくタイプうまく正規化をしていない具体例具体例



  • 具体例お願いしますユーザーの中だけで起きうるのでユーザーの情報青年月日とか性別とかはあってプラスそれは変わらない情報で一方その頃変わる情報も例えばメールアドレスとかも持っていてそこら辺を



  • 同じテーブルにして管理してしまうそれは普通パターンです一本一つのカラムで複数の情報を管理するうわーそっちで来たかうわ違うんだ悔しそうSQLアンチパターンのJWALKっていうパターンがあるんですけどかえちくんが出したのはそのJWALKっていうパターンですね



  • なんでJWOCKって言うんだろうわかんない信号無視って意味らしいんですけどこれはちょっとありがちだけど名前から逆算できないなと思って問題からは外しましたそうなんだじゅんぺいと相談なんですけどもはやマルチカラムアトリビュートはマルチが何にかかってるんだっていうところでカラムアトリビュートにかかってるのかなと思ってカラムの引数が果樹が複数なのかみたいな



  • 2週目終わったんでヒントいくとですねマルチカラムは間違えたマルチはカラムにかかってますカラムなんだよカラムスにならないんだじゃあマルチカラムスじゃないそしたらそれはあのわかんないですもしかしたら翻訳の時に外れたのかもしれないんですけど複数形だよね確かにマルチカラムスかもしれないですうん



  • アトリビュートって引数ですよねアトリビュートは引数で確かにでも引数ってアーギュメントかなどっちも言う気がしますねアーギュメントもアトリビュートも引数な気がしますねアトリビュートってどういう意味でしたっけアトリビュートなんか属性的なイメージが属性かえじゃあ属性じゃんマルチカラムアトリビュートはマルチカラムアトリビュートは



  • 複数のカラムの属性を役としてはあってると思いますトリビュート属性かくそポンピン急に薬何の薬だっけこれ頭痛のやつだカラム2つのカラムがあって



  • 名前一緒だけど属性が違う名前一緒のカラムは定義できませんデータベースのあれに引っかかります恥ずかしいエラーが出ると思います恥ずかしいでも今のめちゃくちゃ惜しいなにしてもその逆ってことか今のめちゃくちゃね惜しい複数のカラムで同じことを言っている



  • ちょっと具体例欲しいですこれも合ってる可能性もあるし間違ってる可能性もあるそんなことあるのかまあいいやユーザーネームと名前カラムがあって同じのが入ってる100%アンチパターンだけどこれじゃないっすね絶対アンチパターンなんですよあるあるだよねでもなんか



  • 運営してるとさこことここ同じじゃねみたいなやつある秘伝のたれDB特にメールアドレスとかである気がするななるほどIDとEメールアドレスかぶっとねどっちも



  • ユーザーIDもメールアドレスもどっちもメールアドレスじゃないみたいなユーザー情報って結構増えがちじゃないですかその結果1対1の別テーブルみたいなやつが現れてどっちにもメールアドレス入ってるみたいな結構ありがちかも確かにそれはありそう



  • そういうことじゃないとちなみに順平両方ターン今多分均衡してると思うんでもう一個ヒントいくとさっきの順平が言ってたことがめっちゃ惜しくてですね同じカラムが定義できないじゃないですかその時どうしちゃうかっていう感じだよねでも俺がさっき言ったことじゃないってことですよねJウォークではないパターンもう一個やりがちなのがあるんですよ



  • さっきカイズさんが言ったのは一つのカラムに複数入れちゃうってやつだけど同じ名前で他のカラマ定義できないと何をしてしまうかっていう他のテーブルにポンピン他のテーブルに同じカラムのやつを作ってしまうマジ?マジ?マジ?マジ?



  • あんまやんなくない?やんないあんまやんなくないそれマジ?やばいちょっと飛び交いになるかも多分その前に一個ねこれどっか現場とかで見たことあるんじゃないかなみたいなことやってしまう気がするけどねえーなんだ聞いたらわかるんだろうな聞いたら絶対わーってなるよこれ同じ



  • カラムを作ろうと思ったらはいピンポンはいピンポン開始か謎のプレフィックスサフィックスがついた同じカラムを作る正解でございますやった当たったこれはですね複数のカラムにまたがって同じ意味のステータスを設定するっていうやつなんですけど例えばタグ付け



  • タグ付けで複数のタグ付けれるとき例えば5個までタグ付けれるよってなったときにタグ1タグ2タグ3タグ4タグ5っていうデータベースを作ってしまってるみたいなカラムを作ってしまってるこれがねアンチパターンマルチカラムアトリビュートでございます普通だったらそれはどうやるべきなんですか普通だったらタグっておそらく叩いたりなると思うんですよ



  • なので別テーブルでまずタグスっていうテーブルを作ってあげてそのタグステーブルとタグ付けしたい対象の中間テーブルとか作ってあげるっていうのが一番綺麗な方法かなとは思いますねでちょっとこれSQLアンチパターンのこの本全体的にあり得るんですけど逆にアンチパターン踏んでもいいよっていうケースもあるんですよ



  • 逆に例えばこのマルチカラムアトリビュートとかも本当にタグ5以上絶対に来ないのであれば使ってもいいっちゃいいけど大体の場合ソフトウェアって変わってくもんなんでやっぱタグ10個付けたよねとかってなった時にほとんどタグヌルなのにデータ入っちゃってたりとか



  • 後で増えるのが面倒かったりとか更新とかもそうだしなるほどっていうことが起きるので基本的にはテーブル分けて設計してあげた方がいいよねっていう感じですね分けたりとか管理しやすいメンテナンスしやすいっていう感じですね絶対に増えない保証があるなら使ってもいいよっていう他のパターンも実は同じで問題があっても



  • そっちの方が利にかなってるのであれば使ってもいいケースもあり得るっていう使わない方がいいのは基本的にそうなんでしょうけど大人な書き方してますねそうなんですこういう見方もあるよみたいなトレードオフがあってそのトレードオフに見合うのであれば使ってもいいよっていう時はある唯一ないのがあってこれももはやアンチパターン名じゃないでしょうっていうのがあるんですけど



  • SQLインジェクションというアンチパターンがあってですねアタックやんこれは簡単に言うとSQLインジェクションできる状態になっちゃってるっていうこれだけは使っていいパターンなかったそれってSQL外のデータベース外の話じゃないですかアプリケーション開発も含めてるこれそうなんですかなるほど



  • さっきのあれも同じですねリーダブルパスワードあれも言ってパスワードの端子はアプリケーションでやると思うんでまあまあユーザーテーブルにはストリングで入るんですか入る入るそうなんだじゃあそうですねじゃあラスト1個いきますかこれねアンチパターンとしては一番物議を醸してそうな



  • これおそらく一番むずいんで当てたら10ポイントですマジかよ0-5ぐらいで返したんですよねこれはちょっとやばいかもしれないですねパターン名ファントムファイルピンポーンファントムファイルパターンテーブルが



  • 気づかぬうちに消え去ってしまうそれはマジで気をつけてくださいファントムなんかでも幽霊みたいなそんな感じの意味ですよね日本語名は幻のですね幻か幻のファイルちなみにこれね本当に名前から推測するしかないかもしれないですこれをアンチパターンだと思ってないはずおそらくテーブル消え去って



  • はいピンポンすごく読み書きが早いあの幻のファイルを使ってシステムを作るそれいいパターンじゃないそれ大きりだもんなそれいいパターンじゃないいやいやいや



  • そんなファイルはないんですよ伝説なんですそんな人は多分ちょっと一回病院行った方がいいですねエンジニア王が置いてきたんですよ置いてきたのどこかにまだ本家の方も見つかってないからね違いますねこれのヒントは普通そうするでしょっていうパターンですね普通に言えばいいんだ



  • アンチパターン探したら見つかんないと思いますファイル?ファイルなんですか?ファイルですファイルってSQLの話でですか?SQLの話でですピンポンはいカイチ君データベースのレコードにファイルパスを保存する正解です15ポイントですかもしや15ポイントですなんかあれですかファイルの実態があるか分かんないはい



  • あらダメみたいなそういうことですか一応この本に書いてあるのは実はデータベースで画像そのまま保存できるよってのが書いてあってバイナリでねよく言われる文句としてはそんなことしたらパフォーマンスが落ちてしまうよって言われてるんですけどそんなことないって言ってますまあまあなので画像はね画像は



  • 画像はね画像は動画かもしれんよ動画はやばいと思うてかね多分なんかサイズは言ってたえーとなんだっけ64MBとか32MBぐらいまでは保存できるよみたいなことを言ってた気がする16かもできるいいよってことですかできるよできるよそれは限界値の話してたはずなのでえーとまあ



  • さっき言ったようにパスで保存してしまうとそのファイルがあるかどうかって実際に分からないけどデータベースに保存していれば絶対あるよねしかも別にパフォーマンスもそんな落ちないから実はこっち使った方がいいよって言ってるのがこのパターンですねへー考え方オンプレですねパブリッククラウドだったらそうはいかない気がする



  • そうなのかなDBのストレージ多分小さくしないとお金がかかるとかあとデータベースの通信量でお金がかかっちゃうんで多分AWSとかだとS3に保存してファイルはS3から落としてねえがベストプラクティスな気がしますねそうですね大体はS3使うんじゃないかなとは思います今だとなので



  • これはむしろよく当てましたねっていうすごすぎるけど一回ふざけててよかったっすそうだよねこれアンチパナだと思ってないからねなんですけど一応選択肢としては画像をバイナリに変換して保存するっていうのもあるっちゃあるよっていうのをね知っておくといつか何かいいことが起きるかもいつか



  • 知れないですね今回のSQLアンチパターン逆コンパイル大会15対0ということでいや惜しかった惜しかったな惜しかったね知った後はそれ答えれたってなったもんね大体そうですね



  • 最後もそうでしょ最後もまあ賞味分かってたみたいなところはありましたねあるんかい賞味ってなんだよというのでSQLアンチパターンはですねこういう感じで結構やってしまいがちなアンチパターンというのもあってデータベースについていろいろ深く知れたりとかこれ絶対アンチパターンじゃん



  • っていうのを現場で見てたりすることが多いと思うのでそういうのが身に染みながら学べるっていうすごくいい本だと思うのでSQLアンチパターンっていう本ですよね本ですパターン集というよりは結構しっかり設計について学べるなって思ってるんでぜひ今1,2年目3年目まだこれ読んだことないよっていう人は一度読んでみると



  • これからデータベース触るときに先輩に怒られるような設計とかをしなくて済むようになるんじゃないかなと思うのでね結構読みやすいんでぜひ皆さん読んでみてくださいという一冊でございました承知しました読んだことないんで読まなきゃなって思ってます今年年始の目標ポッドキャストと別にもうちょっと具体化したところがあるんですけどそこに書いてますSQLアンチパターン読むっていいですね



  • 今年中結構これねさらっと読めるよしかもうんそうですよね物量も多くないと思ううんうん読みたいはいぜひ読んでみてくださいありがとうございますちなみにちょっとだけアフタートークいいですかはいはいネスペ落ちましたおー見たツイッターでいやーマジでさ得点の実感があってなさすぎてはい午後1で落ちたと思ってたんですよ



  • 午後1がなぜか75点とか取ってて午後2は90っていったんじゃないかなと思ってたら55点しかいってなくてなかなかの誤差ですね採点ミスだと思ってます本当は午後1で落ちてた採点ミスって自己採点できますよねできますでも記述っちゃ記述なんで中間点どうつけるかむずい問題はあるんですよねなるほどそうですね



  • そうか気づくか体感午後1やばかったなって感じだったんですけど全然ノーマークの午後2でボコられるっていう結果に終わりましたんで浪人して来年受けたいと思いますわーすごい1年長いなお疲れ様でしたネスペ浪人ですねネスペ浪人中って書いとこうかな



  • ちょっと僕も乗っかっていいですか乗っかっていいですか基本情報を取るのをやめましたやめましたもうやめます宣言します分かりましたもうやっぱ僕前から思ってたんですけど本当に資格勉強のモチベしたくないってなっちゃいました本当にやりたくないってなりましたうんうんうんまあ資格取ったらいいってわけじゃないからはい



  • 宣言します覚えりゃいいからねやったら身につくんですけどね何かしらいい学びにはなるんですけどちょっと違うかもしれないって思いましたなるほどそういう人もいますということでそうだね7500円捨てました申し込んだやんなきゃと思って申し込んだんですよでもそれでもやらなかったんで捨てますはい



  • なるほどこういう順平みたいな人によってあの試験は支えられてくるありがとう本当にありがとうそうですねはい乗っかりましたなんかあのiPAの資格じゃないな合格発表があるたびにバズるのが申し込んだけど試験受けてない人が何人いてでその人たちが一人7500円払ってるから



  • アイパが余計に何円儲かってるかみたいなのを計算してツイートしてる人がいて今年は?結構な金額いったんだよな確かマジで?はい億?億とかいく?10万人くらいだ億?うわーちょっとずるいか僕はいかないかでもギリギリいきそうだよね10万ちょいだったらうん7500円とかっすよねうん7500円2.5億円2.5億円?えーやばあ、ごめんなさいこれあれだわ去年の秋だわ



  • でもあんまり大きく変わんないんじゃないですか実践としては多くいってるんですね2億円春も2.5億円2億5千594万5千円2億のオフセすごいなオフセ確かにお寺とかより稼いでますねこのオフセ引かずじゃないと思うけどね確かに



  • どうなんすかねIPAってNPOとかじゃないそうか確かにわかんない普通に企業か2億5000万ありがとうお伏せIPAの実質お伏せに近い人件費取ってるからお伏せではないわ石杖となりましたお疲れ様でしたお疲れ様でしたお疲れ様でした



  • ハッシュタグひまじんプログラマーでSNSのXフィードバック募集してますので好きなSQLアンチパターンありましたらシェアお願いしますお願いしますあとはポッドキャストの説明欄から番組へのお便り質問要望感想を何でもお待ちしてますお気軽にGoogleフォームから入力お願いしますお伝え報告お待ちしてます仲間探ししてるやんけ仲間探ししてます資格勉強頑張ってください



  • Twitter見ると結構いますよねどっちも3連敗とかいる結構うわーしんどやばいよね各種ポッドキャストプラットフォームでのフォロー高評価お待ちしてますぜひここまで聞いた方お願いします人気者にしてくださいインフルエンサーになりたいねえヨナジさんSKランチパターンありがとうございましたありがとうございましたではまた次回バイバイ



  • 日本のエンジニアは使うアプリが多すぎる事実ヒマプロの使用アプリ平均数38.6個レイキャストならアプリの即起動過去のコピー履歴を引き出せるウィンドウのリサイズなどこれ一つで作業効率アップしかも料金無料今すぐレイキャストで検索

0:00 53:33

#269 SQLアンチパターン逆コンパイル大会