クエリの作成とデータベース設計の専門家でもある非常に多くのプログラマーがいます。
これは、専門のプログラマーまたはソフトウェアエンジニアになるための必須要件でしょうか?
類似の多くは、クエリとコードが開発されている方法でありますが、私の個人的な意見は、あるクエリが異なる持っているように見える構造よりもコードを、異なるアプローチによる同時に両方をマスターするのは難しいことができます。
クエリの作成とデータベース設計の専門家でもある非常に多くのプログラマーがいます。
これは、専門のプログラマーまたはソフトウェアエンジニアになるための必須要件でしょうか?
類似の多くは、クエリとコードが開発されている方法でありますが、私の個人的な意見は、あるクエリが異なる持っているように見える構造よりもコードを、異なるアプローチによる同時に両方をマスターするのは難しいことができます。
回答:
データベースクエリの作成がコア要件であるかどうかはジョブによって異なりますが、リレーショナルデータベースは現在のテクノロジではどこにでもあります。
そのため、データベースクエリの記述方法がわからないプログラマに会った場合、次の2つのいずれかを期待します。
データベースクエリは、より標準的なプログラミング言語とは根本的に異なります。それらは代数的であり、リレーショナルデータで動作することを目的としていますが、C#またはJavaは必須であり、ディスク、メモリ、ユーザー入力などで動作します。
編集:私や他の人がコメントで指摘したように、経験豊富な開発者がデータベースクエリをよく知らないかもしれない正当な理由がいくつかあります:
有効ですが、これらの警告は、経験豊富な開発者がデータベースクエリを知らないという納得のいく理由ではありません。高度に専門化されていない限り、プログラマはリレーショナルデータベースに精通している必要があります。
要約すると、ほとんどの経験豊富な開発者はデータベースクエリを知っている必要があります。
少なくともソフトウェアエンジニアは、データベースの基本的な理解と、SQLを使用してデータを保存および取得する方法について、少なくともこれが何に使用できるのかを理解している必要があります(それにより、キー、ビューの理解も含めます) 、ストアドプロシージャとトリガー)。
すべてのソフトウェアエンジニアが専門家である必要はありません。必要な専門知識のレベルは、焦点を当てるソフトウェアの種類によって異なります。組み込みソフトウェア、ハードウェアドライバー、およびオペレーティングシステムがSQLを使用することはほとんどありませんが、アプリケーションソフトウェア(Web、デスクトップ、またはサービス/デーモンベース)は常にデータベースを使用します。
データベースの知識が不要な専門分野(組み込みシステムなど)がいくつかあります。しかし、ほとんどのビジネスアプリケーションは何らかの種類のデータベースを使用しており、適切に使用する方法を完全に理解していない場合、修正が非常に困難なパフォーマンスの混乱を作成できます。データベースのリファクタリングは複雑で困難なプロセスになる可能性があり、多くの場所はその難しさのために構造的な問題を修正せず、穴の奥深くまで掘り下げることを選択します。データベースの知識があれば、設計はずっと簡単で、時間の経過とともにうまく機能する可能性がはるかに高くなります。
ORMは、データベースの知識を得るための代替ではありません。データベースのクエリと設計の基本を知らずにデータベースを使用する人は、アプリケーションの長期的な負荷処理能力に影響を与える、パフォーマンスの悪い、設計の悪いデータベースを持つ運命にあります。自分が何をしているかを知っている誰かの手にあるORMは問題ありません。データベースについて学習するのが面倒な人の手に渡れば、彼らは通常災害です。
データベースバックエンドを使用するプロジェクトがある場合、データベーススペシャリストは、最初のアプリケーション開発者の後、私が雇う2番目の開発者になります。通常、データベースは使い捨てではありません。データは20年後もほぼ同じ形式で存在するため、最初の段階で専門知識を持っていると役に立ちます。
データベースが1億件のレコードを持ち、実行が遅くなるまでプロジェクトを雇わないため、プロジェクトはしばしばトラブルに巻き込まれます。または、彼らは、設計の無能さではなく、ツールが悪い(正しく設計すればSQL Serverが遅くならない)ことを非難します。
政治的に正しい答え:それは異なります。開発者がリレーショナルデータベースを使用したことがない場合、SQLの知識はまったく価値がありません(そして、今日のNoSQLアプリケーションの時代には、実際にそうなる可能性が高いです)。
第二に、DBAまたはフルタイムのクエリライター(タイトルが何であれ)がいる場合、理解もそれほど重要ではありません。
開発者がすべての取引をする必要があり、リレーショナルデータベースを使用するためのプロジェクトに要件がある場合(たとえば、旧式のWebアプリケーションや既存のデータベースとの接続)にのみ重要です。
私の個人的な意見:いいえ。経験豊富なソフトウェア開発者は、必要に応じて「デフォルト」ではなく、必要なときに新しいスキル(SQLなど)を習得できるはずです。柔軟性と学習と理解の能力こそが、優れた開発者と大丈夫な開発者を区別するものです。「黄金のハンマー」ルールも適用されます-SQLの知識が豊富な開発者がいる場合、この開発者が最もよく知っているツール(リレーショナルデータベース)を引き出して、すべての問題を解決しようとしますが、必ずしもそうではありません最良のソリューションになるために。もちろん、これはNoSQL支持者にも当てはまります;)。
適切な仕事に適切なツールを選択することは、経験豊富なプログラマが知っておくべきことです。
このウィキペディアのコンピュータープログラミングの概要をご覧ください。
コンピュータープログラミング(多くの場合、プログラミングまたはコーディングに短縮)は、コンピュータープログラムのソースコードの設計、作成、テスト、デバッグ/トラブルシューティング、および保守のプロセスです。このソースコードはプログラミング言語で書かれています。プログラミングの目的は、特定の望ましい動作を示すプログラムを作成することです。
データベースクエリには独自の言語があり、設計、テスト、デバッグ、管理が可能です。データベースクエリの目的は、必要な情報を必要な方法で取得できるようにすることです。
だから、間違いなくプログラミングだと思う。
エンタープライズおよびビジネスアプリケーション(編集:特にRDBMSを使用するプロジェクト)のバックグラウンドを持つ優れたソフトウェアエンジニアは、標準形式でリレーショナルデータベースクエリを記述する専門知識を持っている必要があります。さらに、複雑なスキーマを理解し、少なくとも中程度の複雑さのスキーマ設計を提案できる必要があります。
非常に高度または複雑なスキーマ設計は、データモデラーまたは機能設計者の領域でなければなりません。
これは、データベースプログラマーにも場所がないという意味ではありません。単一のデータベースベンダー(Oracle、MySQL、SQLServerなど)のユニークなツールと製品に焦点を当てた複雑なストアドプロシージャ、複雑で効率的なクエリ、およびデータベース層のソフトウェア設計とアーキテクチャは、可能な限りプロフェッショナルソフトウェアに残す必要があります。これらの非常に専門的で複雑なオファーリングの経験があるエンジニア。
しかし、私の意見では、ビジネスおよびエンタープライズシステムの大部分は、データモデラーや専門的なデータベースプログラマーの必要性を正当化するものではありませんが、これらの人々がテーブルに持ち込んだ知識と専門知識から大きな恩恵を受ける前に、そのようなプロジェクトに取り組んできました。
他の人はすでにデータベースクエリに関するあなたの質問に答えています。
データベース設計は、特定のタイプの設計です。学ぶことはそれほど難しくありませんが、典型的なデータベース設計者はデータベースを設計するそれほど多くの機会を得ることはありません。
現在作業中の場所は、1970年と同じデータベース設計です。データベースをIDMSからDB2に移動しましたが、同じネットワークデータベース設計です。ここで働いてきた9年間で、5つの新しいDB2テーブルを作成する機会がありました。
専任のデータベースデザイナーがいる職場はほとんどないと思います。したがって、データベース設計は上級アナリストのレパートリーの一部と見なされると結論付けます。
ソフトウェアにおけるデータベースの重要性を過大評価していると思います。
アプリケーションの多くのクラスはデータベース中心ではありません。
ワードプロセッサと画像エディタにDBMSが必要になりましたか?音声認識やコンピュータービジョンシステムについては、これらには多くのデータベースクエリが含まれていますか?
また、リニアビデオエディターやビデオゲームの物理エンジンはどうですか?
クエリの作成はプログラマにとって必須の要件ではないと思います。そうは言っても、クエリを作成してデータベースを設計できるプログラマは組織にとってより価値があると思います。
ただし、このプログラマーが「select * from tblxxxx」タイプのクエリのみを記述できる場合、このプログラマーを専門家とは見なしません。同様に、このプログラマーによって設計されたデータベースが2つのテーブルではなく1対多の関係を1つのテーブルに配置する場合、このプログラマーをエキスパートとは見なしません。
これをIT以外の人に説明する方法を次に示します。ITプロフェッショナルは、大工、電気技師、配管工が尊敬される分野を専門とするのと同様に、特定の分野を専門としています。彼らはいくつかのスキルをオーバーラップする傾向がありますが、すべての分野の専門家ではありません。電気技師は簡単に大工仕事を自信を持って行うことができますが、複雑な構造に取り組むことはうまくいきません。
同様に、プログラマーは、単純なクエリやデータベースの設計を記述または操作する方法を知っている必要がありますが、複雑なデータ構造を設計することは期待されていません。