データベースを設計するのはプログラマの仕事ですか?


16

私は過去6年間プログラマーでした。私のキャリアを通じて、私は多くのWebアプリケーションに取り組んできました。

ほとんどの場合、データベースが必要になったとき、それは私たち(プログラマー)に与えられたか、作業するレガシーデータベースがありました。そうでない場合は、データベースを独自に作成および設計する必要がありましたが、それほど難しくはありませんでした。

しかし、プログラマーとして、データが非常に重要で複雑なデータモデルを使用して厄介な要件を持つ新しいアプリケーションを構築する必要がある場合、データベース全体をゼロから作成することになっていますか?

専門家がそれを成し遂げることは、アプリと会社の最大の利益ではありませんか?

私はデータベースの設計から逃げようとはしていませんが、それを正しく行うことはとても重要なことです。


2
答えはイエスです。ここでの正しい答えは、あなたの経営者が考えを変えるのに役立つでしょうか?そうは思いません。一方、それは非常に良い経験になるでしょう。データスキーマを設計してみませんか?
エミネマンス

9
「DBエキスパート」と「プログラマー」は相互に排他的ではありません。データベースを設計する専門家が必要になります。そのエキスパートはプログラマーかもしれません。
主Tydus

10
馬に乗る方法を知ることは兵士としての私の仕事ですか?これはトレーニングの一部である場合とそうでない場合がありますが、何らかの理由であなたの生存が馬に依存している場合、答えは明らかです。あなたの仕事の説明が変化している場合、驚くべきことに、おそらく他の場所を見てください。他の人に頼るのが好きではないからといって、私は個人的にこれらのdbスキルを習得します。
仕事

@Jobは良いことを言っていませんでした:)
ソンゴ

回答:


32

まず、プロジェクトマネージャーから指示された場合、それはあなたの仕事です。中小企業には、フルタイムのDBエキスパートがいないことがよくあります。とにかく開発者とDBエキスパートの間に明確な区別はありません(すべきではありません)-優れた開発者はDBについてかなりの知識を持ち、優れたDBAは少なくともストアドプロシージャのDB言語でのコーディング方法を知っています。 。

DBの設計はアプリケーションの非常に重要な部分ですが、他の多くのコードが依存する他の重要な部分よりも「正しく」行うことは重要ではありません。

そして、コードと同じように、あなたがスーパーエキスパートを座らせて一週間懸命に考え、それから変更する必要のない完璧なデザインを書き留めるというアイデアは幻想です。DB設計は、アプリケーションの開発中に変更される可能性があります。

したがって、実際にはDBをプログラマー(DBをよく理解している)が設計することは有益です。なぜなら、あなたは両方の側面を知っている誰かを持っているからです。それは、DBのみを理解し、開発作業の残りの部分とは関係のない人がそれを行うよりも確かに優れています。


データベース設計に関しては、DBAとデータベース開発者の違いを教えてください。
松o

@Songo:IMOに違いはありません。
マイケルボルグワード

1
本当に?データベース開発者はデータベースのモデリングと設計に関心があるのに対し、DBAはデータベースの実行とチューニングに専念していると常に思っていました。
松o

3
データベース管理者とデータベース開発者は2つの異なるものです。中小企業は通常、違いを知りません。大規模なエンタープライズシステムで作業する場合、dba、ビジネスインテリジェンス開発者(分析サービス、データウェアハウス)、およびデータベース開発者がいる場合があります。私たちにとって、それらは非常に異なる仕事です。
-CodeART

1
@CodeWorks:確かに違いますが、IMOはその種の過剰な専門化を定着させる組織的なアンチパターンです。専門化のみを知っている人々の間のコラボレーションが非常に問題になるためです。
マイケルボルグ

4

プログラマーがデータベースを作成することは一般的です。ごく普通。残念ながら、多くのプログラマーはDBの経験がありません。彼らは、ビッグデータ、データマートの概念、スタースキーマなどに対してレポートする方法を理解していません。正規化の基本さえ理解していない人もいます。

一人の男が専門家レベルですべてを行うスキルを持っている場合、それは非常に良い製品になります。1人の軍隊は、10人のチームが1000倍の品質でわずかな時間でできることを実行できます。誇張ではありません。

プログラマーが何をしているのかを知っていると仮定して、プログラマーがそれを行うのは(人が少ないほど)利益になります。もちろん、指摘する障害も数千あります。


私はすべての小さなチームでこれが頻繁に起こっていると感じています。DBの経験がほとんどない開発者は、自分のコードの下でデータベースを設計し(表面的にはそれほど難しくありません)、チューニングする(より難しい)ことが期待されます。常にDBAを自由に使いたいと思っています。
リグ

1
「誇張ではありません。」何らかの形でこの主張を限定できない限り、そうです。
バーハンアリ

4

その興味深い質問-ほとんどのまともな開発者はリレーショナルデータベースを適切に構造化する方法を理解する必要があるという強い議論があります。つまり、正規化されたスキーマを作成し、経験と一般的なパターンに基づいて合理的なデータをどのように構造化して保存するかに関する決定(私にとってはほとんど自明ですが、誰もがそのように見ているわけではないことを知っています)。

さらに、Entity Framework Code-firstを見ると、低レベルのデータモデルを構築するのと同じ考えが合理的なスキーマを生成することを示唆しています-または少なくとも1つのヒントです。

いいえ、少なくともデータベーススキーマを設計するためにデータベースの専門家が必要だとは特に思いません-少なくとも中小規模のデータベース(これは私が取り組んできたものです)には必要ありません。

問題は、適切な(または少なくとも適切な)スキーマの設計がすべてではないことです-特にデータベースを拡張する必要がある場合はそうではありません。DBAによってもたらされる「付加価値」は、基本的なスキーマ以外のこと-インデックス、ストレージの構成、データベースのメンテナンス(ファイルサイズのチェック、インデックスの再構築など)、より賢いことです。ユーザーや役割などと一緒に。

優れたプログラマーは、多様なスキルのポートフォリオを持ち込む必要があります-[選択言語の挿入]コーダー以上である必要があり、そのポートフォリオにデータベースの理解を含めます。


4

合理的なリレーショナルデータベースを設計する能力は、基本的にはジュニア以外のプログラマにとって必要だと思います。

とはいえ、特に大規模なアプリケーションの場合、データベースを最初に「正しく」取得することが重要です(スキーマ、インデックス作成など)。会社が熟練したDBAにアクセスできる場合、そのタスクは彼らの皿に落ちます。一般的に、彼らはより資格があります。潜在的なレビュー/議論は、驚くことのないように、クライアント側でデータベースにアクセスして作業する主任開発者と行う必要があります。DBAがいない場合、プログラマはデータベースを設計します。


1
データベース管理者は、必ずしもデータ分析者ではありません。データベースを調整し、リレーショナルデータを正規化するには、それぞれ異なるスキルセットが必要です。
ギルバートルブラン

1

ここに2つの質問があります。

  • データベース開発者はビジネスロジックをモデル化する必要がありますか?
  • データベースにデータを永続化する方法を知っている必要がありますか?

ビジネスの論理

  • ビジネスロジックはデータベースに存在しません。これは概念モデルであり、システム内の他のレイヤーから独立している必要があります。

  • あるデータベースを別のデータベースにいつでも置き換えることができます。また、潜在的なパフォーマンスの問題に対処するためにNoSQLソリューションを使用することもできます。

  • データベース開発者はモデリングプロセスに関与できますが、通常、これは問題の領域を完全に理解している人々によって行われます。私たちの組織では、これはサーバー側の開発者によって行われます。

  • データベースはアプリケーションの基盤であると多くの人が考えています。貧弱な基盤を作ると、システムが崩壊します。私はこれに同意しません。データベースは、常に交換可能なストレージメディアと考えています。

データの永続化

  • SQLやNoSQLソリューションなど、さまざまなストレージメディアにデータを保持する方法を知っておく必要があります。

  • 必要な専門知識のレベルは、作業しているシステムのサイズによって異なります。

  • 大企業が通常、パフォーマンス、スケーラビリティ、およびセキュリティ関連の要件に対処するために専門家を雇う場合、中小企業はあなたにその知識があることを期待するでしょう。

要約すると:

  • ドメインモデルは、データベースではなく、システムの基盤です。

  • 比較的小さなプロジェクトで小さな会社で働いている場合は、おそらく自分でデータベースを設計する必要があります。

  • 大企業でエンタープライズシステムを使用している場合は、ドメインの専門家に作業を渡す方が理にかなっています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.