web-dev-qa-db-ja.com

経験豊富なプログラマはデータベースクエリを知っている必要がありますか?

クエリの作成とデータベースの設計のエキスパートでもあるプログラマーは非常に多くいます。

これは、エキスパートプログラマーまたはソフトウェアエンジニアになるためのコア要件ですか?

クエリとコードの開発方法には多くの類似点がありますが、私の個人的な見解は、Queriesは異なる構造を持っているようですCodeより、アプローチが異なるため、両方を同時にマスターするのは難しい場合があります。

35
Shamim Hafiz

データベースクエリの書き込みがコア要件であるかどうかは職務によって異なりますが、リレーショナルデータベースは現在のテクノロジーでは広く普及しています。

したがって、データベースクエリの記述方法がわからないプログラマに出会った場合、次の2つのうちの1つを期待します。

  1. 彼らは一般的に未経験です。
  2. 彼らは別の分野(例えば、組み込みシステム)に非常に特化しており、それを学ぶ必要がなかった。

データベースクエリは、より標準的なプログラミング言語とは根本的に異なります。 C#またはJavaは必須であり、ディスク、メモリ、ユーザー入力などで動作しますが、代数的でリレーショナルデータを操作することを目的としています。LISPやHaskellなどのより代数的な関数言語でもフォームはリレーショナルデータにあまり向いていません。

編集:私や他の人のコメントで指摘されているように、経験豊富な開発者がデータベースクエリをよく知らない理由はいくつかあります。

  • 彼らのチームはORM/NoSQLを使用しました
  • 彼らのチームにはDBプログラマーがいました
  • アプリケーションの複雑さはビジネスロジックにあり、DBクエリは取るに足らないものでした
  • 彼らのチームは、一部のプログラマーがクエリを作成しないように作業を割り当てました

これらの警告は有効ですが、経験豊富な開発者がデータベースクエリを知らない理由には説得力がありません。高度に専門化されていない限り、プログラマはリレーショナルデータベースに精通している必要があります。

要約すると、最も経験豊富な開発者は、データベースクエリを知っている必要があります

69
Matthew Rodatus

すべてのソフトウェアエンジニアは、データベースの基本的な知識と、SQLを使用してデータを保存および取得する方法を理解している必要があります。少なくとも、これを何に使用できるかを理解しているレベルで(および、キー、ビューの理解も含めます) 、ストアドプロシージャとトリガー)。

すべてのソフトウェアエンジニアがエキスパートである必要はありません。必要な専門知識のレベルは、対象とするソフトウェアの種類によって異なります。組み込みソフトウェア、ハードウェアドライバー、オペレーティングシステムでSQLを使用することはほとんどありませんが、アプリケーションソフトウェア(Webまたはデスクトップ、サービス/デーモンベースなど)は常にデータベースを使用します。

23
wolfgangsz

データベースの知識が必要とされないいくつかの専門分野(たとえば、組み込みシステム)があります。しかし、ほとんどのビジネスアプリケーションは何らかのデータベースを使用しており、適切に使用する方法を完全に理解していないと、修正が非常に難しいパフォーマンスの混乱を引き起こす可能性があります。データベースのリファクタリングは複雑で困難なプロセスになる可能性があり、多くの場所では、構造上の問題を修正しないことを選択しています。データベースの知識があれば、設計はずっと簡単になり、時間をかけてうまくいく可能性がはるかに高くなります。

ORMは、データベースの知識を得るための代わりにはなりません。データベースのクエリと設計の基本を知らずにこれを使用する人は誰でも、アプリケーションの負荷を処理する長距離能力に影響を与える、パフォーマンスが低く、設計が悪いデータベースを持つ運命にあります。彼または彼女が何をしているかを知っている誰かの手の中にあるORMは問題ありません。データベースについて学ぶのに煩わされることができない人々の手に、彼らは通常災害です。

データベースバックエンドを使用するプロジェクトがある場合、データベーススペシャリストは、私が雇う2番目の開発者になります(最初のアプリケーション開発者に次ぐ)。データベースは一般的に使い捨てではなく、データは20年後も同じフォームに近い形で存在します。初期段階で専門知識を持つことは価値があります。

データベースに100,000,000のレコードがあり、実行速度が遅くなるまで、プロジェクトはこれらの人々を雇わないため、プロジェクトはしばしば問題に直面します。または、ツールが悪い(正しく設計されていてもSQL Serverが遅いわけではない)のは、設計の無能ではないと非難します。

18
HLGEM

政治的に正しい答え:場合によります。開発者がリレーショナルデータベースを操作しない場合、SQLの知識はまったく価値がありません(そして、今日のNoSQLアプリケーションの時代では、それは実際にありそうです)。

第2に、DBAまたはフルタイムのクエリライター(タイトルが何であれ)がいる場合、理解もそれほど重要ではありません。

開発者が何でも屋である必要があり、リレーショナルデータベースを使用するためのプロジェクトに要件がある場合(たとえば、昔ながらのWebアプリケーションや既存のデータベースとの接続など)は、本当に重要です。

私の個人的な意見:いいえ。経験豊富なソフトウェア開発者は、必要に応じて「デフォルト」ではなく、必要に応じて新しいスキル(SQLなど)を習得できるはずです。柔軟性と、学習および理解する能力は、優れた開発者と良い開発者を区別するものです。 「ゴールデンハンマー」のルールも適用されます。SQLに関する豊富な知識を持つ開発者がいる場合、この開発者が彼が最もよく知っているツール(リレーショナルデータベース)を利用して、すべての問題を解決しようとする可能性が高いです。最高のソリューションになるために。もちろん、これはNoSQLの支持者にも適用されます;)。

経験豊富なプログラマが知っておくべきことは、適切な作業に適切なツールを選択することです。

15
Cthulhu

エンタープライズおよびビジネスアプリケーション(編集:特にRDBMSを使用するプロジェクト)のバックグラウンドを持つ優れたソフトウェアエンジニアは、リレーショナルデータベースクエリを標準形式で作成する専門知識が必要です。さらに、複雑なスキーマを理解し、少なくとも中程度の複雑さのスキーマ設計を提案できる必要があります。

非常に高度な、または複雑なスキーマ設計は、データモデラーまたは機能アーキテクトの領域である必要があります。

これは、データベースプログラマにも場所がないという意味ではありません。複雑なストアドプロシージャ、複雑で効率的なクエリ、および単一のデータベースベンダー(Oracle、MySQL、SQLServerなど)のユニークなツールや製品に焦点を当てたデータベース層ソフトウェアの設計とアーキテクチャは、可能な場合は専門のソフトウェアに任せるのが最善です。これらの高度に専門化された複雑なオファーリングの経験を持つエンジニア。

ただし、ビジネスシステムおよびエンタープライズシステムの大多数は、データのモデラーや専門のデータベースプログラマーの必要性を正当化するものではありませんが、これらの人々がもたらした知識と専門知識から大いに恩恵を受けるまでは、そのようなプロジェクトに取り組んできました。

7
maple_shaft

このウィキペディアでコンピュータープログラミングの概要を確認してください。

コンピュータープログラミング(プログラミングまたはコーディングに短縮されることが多い)は、コンピュータープログラムのソースコードを設計、記述、テスト、デバッグ/トラブルシューティング、および保守するプロセスです。このソースコードはプログラミング言語で書かれています。プログラミングの目的は、特定の望ましい動作を示すプログラムを作成することです。

データベースクエリには独自の言語があり、設計、テスト、デバッグ、管理が可能です。データベースクエリの目的は、必要な情報を必要な方法で取得できるようにすることです。

だから、間違いなくプログラミングだと思う。

7
guiman

他のユーザーは、データベースクエリに関する質問に既に回答しています。

データベース設計は、特定のタイプの設計です。学ぶことはそれほど難しくありませんが、典型的なデータベース設計者はデータベースを設計する多くの機会を得ません。

現在作業している場所のデータベース設計は1970年と同じです。データベースをIDMSからDB2に移動しましたが、ネットワークデータベース設計は同じです。私はここで働いてきた9年間で5つの新しいDB2テーブルを作成する機会がありました。

専任のデータベースデザイナーがいる職場は少ないと思います。したがって、データベースの設計はシニアアナリストのレパートリーの一部と見なされていると私は結論づけます。

6

ソフトウェアにおけるデータベースの重要性を過大評価していると思います。

アプリケーションの多くのクラスはデータベース中心ではありません。

ワープロや画像エディタにDBMSが必要ですか?音声認識およびコンピュータビジョンシステムについては、これらにデータベースクエリが多数含まれていますか?

そして、リニアビデオエディタとビデオゲームの物理エンジンはどうですか?

5
Alex Jasmin

率直に言って、私たちの多くは、すべての開発はデータベースとSQLデータベースを中心に展開していると思っています。

他の人たちは、データベースで(間接的に)作業しているときでも、私たちの仕事でSQLの重要な部分を回避できる多くの方法について言及しましたが、101の電気製品のファームウェアを作成するすべての開発者はどうでしょうか持っている?リアルタイム監視を専門とする人はどうですか?

今日の開発者の大多数がさまざまな程度のSQLスキルを持っていることをお勧めしますが、それは彼らの能力のバロメーターになるにはほど遠いです。

5
cjmUK

私は、ジェネラリストの開発者が少なくともデータベーステクノロジー(リレーショナルまたはそれ以外)を認識し、それらを使用することの長所と短所について議論できることを期待しています。そうでなければ、私は彼らが行う方法を知っているすべてがフラットファイルにデータを詰め込むことを恐れているでしょう。

5
Barry Brown

クエリ作成はプログラマーにとってコア要件であるとは思いません。そうは言っても、クエリを記述してデータベースを設計できるプログラマーは、組織にとってより価値があると思います。

ただし、このプログラマーが「select * from tblxxxx」タイプのクエリしか記述できない場合、このプログラマーはエキスパートであるとは思わないでしょう。同様に、このプログラマーが設計したデータベースが1対多の関係を2つのテーブルではなく1つのテーブルに配置する場合、このプログラマーを専門家とは見なしません。

これを、IT以外の人々に説明する方法を次に示します。 IT専門家は、大工、電気技師、配管工がその分野で専門とする方法と同様に、特定の分野を専門としています。彼らはいくつかのスキルと重複する傾向がありますが、すべての分野の専門家ではありません。電気技師は、簡単に大工仕事を自信を持って行うことができますが、複雑な構造に取り組むことはうまくいきません。

同様に、プログラマーは、単純なクエリやデータベース設計を作成または操作する方法を知っているはずですが、複雑なデータ構造を設計することは期待されていません。

私たちの部門を見回すと、状況によって異なります。

  • 私たちのdesktop/web/server開発者。少なくとも、専門分野に応じて基本から高度なクラッドステートメントを作成する必要があります。最適化のために、いくつかの専門のDB管理者がいます。
  • 私たちの組み込みプログラマ。 「select * from mytable」を通過したことがない人はかなりいます。ただし、この数か月間でsqlliteがプロジェクトに導入されたことで、状況も変わりました。
3
Carra