質問
現在、バックエンドエンジニアへの転職活動中でポートフォリオを作成しております!
先日現場のエンジニアの方から「SQL文を使えないのはダメだ」と言われてしまったのですが、PFレベルのアプリケーション開発ではO/Rマッパーを使用すればSQL文を深くは理解しないままそれなりのDB操作が出来てしまうためあまりピンときませんでした。(一応生成されるSQL文は理解できます!)
そこで現場でORMを使用している方に質問なのですが、どのような場面でSQL文を理解、使用できないと困るのが教えていただきたく質問させていただきました。
私の予想では
・FW内ではなく直接DBを触る機会が頻繁に発生するため
・実際のアプリケーションではORMの簡単なメソッド では絞り込むことができない複雑なDB処理がしばしば発生するため
なのかな、と考えております。
宜しくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
O/Rマッパーを使う上でもSQLの原理は知っておいたほうがよいと思います。たとえば、排他制御、一意制約とか大丈夫ですか?
以下のように、現実の「事故」も発生しています。
「雇用調整助成金」は、売り上げが減少しても企業が従業員を解雇せずに雇用を維持し、休業手当を支払った場合に国が手当ての一部を助成する制度で、休業を余儀なくされた企業のニーズの高まりなどを受け、厚生労働省は20日から手続きを簡素化するためオンラインでの申請の受け付けを始めました。
しかし、申請するための専用の画面にアクセスすると、ほかの申請者の名前やメールアドレス、それに電話番号などが見られる状態になっていたということで、一般の申請者からの問い合わせを受け、現在、受け付けを中止しています。
厚生労働省によりますと、同じタイミングでシステムに登録すると本来、個別に割りふられるはずのIDが同じになり、個人情報が見られる状態になっていたということです。
「雇用調整助成金」オンライン申請 不具合 復旧めど立たず | NHKニュースより引用
こういう問題は、SQLの基礎がわかっていれば起こさないはずの問題ですが、「データベースの操作さえできれば良い」と考えている人が作ると起こしがちではないかと思います。
これを題材にして動画を作りましたので、参考にしてください。
会員登録が混雑するとIDが重複してしまうサイトを作ってみた - YouTube
また、ウェブアプリケーションの開発だけでなくバッチ処理のスクリプトを書く場合や、保守業務などでSQL文を書くことは、どの現場でもあるように思います。
転職活動中とのことですが、面接官から「SQL文の読み書きはできますか?」と質問されて、「O/RマッパーがあればSQL文がわからなくても大丈夫なのでSQLの勉強はしていません」と回答したら、面接官の心証はよくない気がします。
投稿2021/05/06 05:34
総合スコア11705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/06 09:14
0
SQLの知識は必須だけどSQLは書かない。
プロジェクトごとに方針は違うんだから一般的な答えなんかない。
投稿2021/05/06 05:02
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Laravel などのフレームワークを採用しておきながら、ORM を毛嫌いして、DB::raw() の使用を推奨したり、強制する一派は少なからず生息しています。
普通に ORM 使う方が、フレームワークの提供する機能を犠牲にしなくて済むのですけどね。
フレームワークを利用しているのであれば、
- 基本的には ORM で書く。
- パフォーマンスに著しく悪い影響がある場合に限り、生SQLで書く
というのが現実的でしょう。
「パフォーマンスに著しく悪い影響がある場合」となると構造も複雑だったり、リレーションも複雑になりがちなので、そういった場面では、SQLの高度な知識は必要となります。
古くからプログラミングやっている人の中には、「生SQL原理主義者」がいて、自分の観測範囲では、フレームワークの知識が浅すぎて、「生SQLでないとパフォーマンスが・・・」などという人がそのタイプ。
フレームワークのことをしっかりわかっていて、SQLもちゃんと知識あった方がいいよという人もいる。
確かに、デバッグの時などは、SQLわかっている方が強い場面は多いよいうに思います。
投稿2021/05/06 05:01
総合スコア3923
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/06 08:56
2021/05/06 09:19
2021/05/06 10:41
0
ポートフォリオは結局「自分は現在何ができる、こういう趣向を持っている」というアピールのために作るものですし、採用する方はそれらを見てどういう現場に投入するか考えるものです。
現場がどのようになっているかを考えたところで、現在の実力以上のところに配置されることはないのですから、「何がどの程度できる」がきちんと伝えられるような資料を準備するのが先決ではないでしょうか。
何事も「できるに越したことはない」のはどんな現場や業界でも当然のことですが、嘘ついたところですぐ(もしかしたら書類選考レベルで)バレるので。
ここで「深く理解したほうがいい」とアドバイスを真に受けて「じゃあ今から」って間に合うわけがありませんし。
もしSQLもしくはデータベースの理解度を伝えたいのでしたらアプリケーションそのものよりも、ER図とか正規化されたデータベース設計とかそこからどのようにパフォーマンスを出すように工夫したとか、そういう資料があった方がいいでしょうしね。
「バックエンドエンジニア」とひとえに言ってもやることできることは非常に広いので、自身が何を主としてアピールしたいかでしょう。
投稿2021/05/06 05:39
総合スコア80875
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/06 09:17
2021/05/06 09:23 編集
2021/05/06 10:38
2021/05/06 10:44
2021/05/06 10:45
2021/05/06 10:45
2021/05/06 10:59
2021/05/06 11:08
2021/05/06 11:24
2021/05/06 11:48
0
どのような場面でSQL文を理解、使用できないと困るのが教えていただきたく質問させていただきました。
クエリのスピードチューニングを行う上では、SQL文からEXPLAIN
してデータベースサーバの挙動を探る、ということが欠かせないです(最終的にクエリビルダーを使った形で充分な性能が出るようにできることが大半です)。
投稿2021/05/06 05:17
総合スコア145930
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/06 09:00
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。