apeescape2.com
  • メイン
  • プロジェクト管理
  • ブランドデザイン
  • 製品の担当者とチーム
  • 分散チーム
技術

データベース設計の悪い習慣:あなたはこれらの間違いを犯していますか?

開発者として、既存のコードに基づいたタスクが与えられるときはいつでも、多くの課題に直面する必要があります。そのような課題の1つ(多くの場合、最も要求の厳しいもの)には、アプリケーションのデータモデルを理解することが含まれます。

通常、わかりにくいテーブル、ビュー、列、値、ストアドプロシージャ、関数、制約、およびトリガーに直面します。これらは、意味をなすのに長い時間がかかります。そして、そうなると、保存された情報を改善して活用するための多くの方法に気づき始めます。

経験豊富な開発者であれば、最初はもっとうまくできたかもしれないこと、つまり設計上の欠陥にも気付く可能性があります。



この記事では、一般的なデータベース設計の悪い慣行のいくつか、それらが悪い理由、およびそれらを回避する方法について学習します。

悪い習慣その1:データの目的を無視する

データは後で消費するために保存されます。目標は常にデータを保存し、最も効率的な方法で取得することです。これを実現するには、データベース設計者は、データが何を表すのか、どのように取得するのか、どのくらいの速度で、その運用量(つまり、予想されるデータの量)を事前に知っておく必要があります。 、どのように使用されるか。

C ++のヘッダーファイル

たとえば、データが毎日手動で収集される産業情報システムは、情報がリアルタイムで生成される産業システムと同じデータモデルを持ちません。どうして?なぜなら、月に数百または数千のレコードを処理することは、 それらの何百万もの管理 同じ時期に。データ量が多い場合は、データベースの効率と使いやすさを維持するために、設計者は特別な考慮を払う必要があります。

ただし、もちろん、データの目的は正規化のレベル、データ構造、レコードサイズ、およびシステム全体の一般的な実装にも影響するため、考慮すべき側面はデータ量だけではありません。

したがって、作成するデータシステムの目的を完全に理解することは、データベースエンジンの選択、設計するエンティティ、レコードのサイズと形式、およびデータベースエンジンの管理ポリシーに関する考慮事項につながります。

これらの目標を無視すると、構造的および数学的には正しいものの、基本的に欠陥のある設計になります。

悪い習慣その2:正規化が不十分

データベースの設計は決定論的な作業ではありません。 2人のデータベース設計者は、特定の問題についてすべてのルールと正規化の原則に従う場合があり、ほとんどの場合、異なるデータレイアウトを生成します。これは、ソフトウェアエンジニアリングの創造的な性質に固有のものです。ただし、すべてのインスタンスで意味のある分析手法がいくつかあり、それらに従うことが、最高のパフォーマンスを発揮するデータベースに到達するための最良の方法です。

2つの異なるレイアウトにつながる1セットのデータの画像

それにもかかわらず、正規化の最も基本的なルールに従わずにオンザフライで設計されたデータベースに直面することがよくあります。明確にする必要があります。エンティティを最もよく表すレイアウトであり、レコードのクエリと挿入、更新、削除のパフォーマンスのバランスが最も取れているため、すべてのデータベースは少なくとも第3正規形に正規化する必要があります。 。

に準拠していないテーブルでつまずいた場合 3NF 、2NF、または1NFでさえ、これらのテーブルの再設計を検討してください。そうすることに投資する努力は、非常に短期的には報われるでしょう。

悪い習慣3:冗長性

前のポイントに非常に関連しています。 正規化の目標 それを減らすことですが、冗長性は非常に頻繁に現れるもう1つの悪い習慣です。

設計原理の定義

冗長なフィールドとテーブルは、同じ情報の多くのバージョンを最新の状態に保つためにビジネスロジックを必要とするため、開発者にとって悪夢です。これは、正規化ルールに完全に従えば回避できるオーバーヘッドです。冗長性が必要と思われる場合もありますが、将来の開発で考慮に入れるために、非常に特殊な場合にのみ使用し、明確に文書化する必要があります。

冗長性の典型的な悪影響は、データベースサイズの不必要な増加、データの不整合が発生しやすいこと、データベースの効率の低下ですが、さらに重要なことに、データの破損につながる可能性があります。

悪い慣行その4:悪い参照整合性(制約)

参照整合性は、データベースエンジンがデータ品質を最高に保つために提供する最も価値のあるツールの1つです。設計段階から制約が実装されていないか、ほとんど実装されていない場合、データの整合性はビジネスロジックに完全に依存する必要があり、人的エラーの影響を受けやすくなります。

悪い習慣その5:DBエンジンの機能を利用していない

を使用している場合 データベースエンジン (DBE)、ソフトウェア開発を簡素化し、情報が常に正しく、安全で、使用可能であることを保証する、データ処理タスク用の強力なソフトウェアがあります。 DBEは、次のようなサービスを提供します。

  • データをすばやく効率的に表示する方法を提供するビュー。通常、データの正確性を失うことなく、クエリの目的でデータを非正規化します。
  • テーブルのクエリを高速化するのに役立つインデックス。
  • プログラミングなしで情報を分析するのに役立つ集計関数。
  • 予期しないことが発生した場合にすべて実行され、コミットまたはキャンセル(ロールバック)されるトランザクションまたはデータ変更文のブロック。これにより、情報が永続的に正しい状態に保たれます。
  • トランザクションの実行中にデータを安全かつ正確に保つロック。
  • 複雑なデータ管理タスクを可能にするプログラミング機能を提供するストアドプロシージャ。
  • 高度な計算とデータ変換を可能にする関数。
  • データの正確性を保証し、エラーを回避するのに役立つ制約。
  • データでイベントが発生したときにアクションを自動化するのに役立つトリガー。
  • 内部で実行されるコマンドオプティマイザー(実行プランナー)。すべての文が最高の状態で実行されるようにし、将来の実行計画を維持します。これは、ビュー、ストアドプロシージャ、および関数を使用する最も良い理由の1つです。これらの実行プランは、DBEに永続的に保持されるためです。

これらの機能を知らない、または無視すると、開発は非常に不確実な道に進み、間違いなくバグや将来の問題につながります。

悪い習慣その6:複合主キー

多くのデータベース設計者は、2つ以上のフィールドの組み合わせによって定義される複合フィールドではなく、整数IDの自動生成フィールドを主キーとして使用することについて最近話しているため、これは一種の論争の的となっています。これは現在「ベストプラクティス」として定義されており、個人的には同意する傾向があります。

複合主キーの画像

ただし、これは単なる慣例であり、もちろん、DBEでは次の定義が可能です。 コンポジットプライマリ 多くの設計者が避けられないと考える鍵。したがって、冗長性と同様に、複合主キーは設計上の決定事項です。

ただし、複合主キーを持つテーブルに数百万行が含まれると予想される場合、複合キーを制御するインデックスは、CRUD操作のパフォーマンスが大幅に低下するまで大きくなる可能性があることに注意してください。その場合、インデックスが十分にコンパクトになる単純な整数IDの主キーを使用し、一意性を維持するために必要なDBE制約を確立することをお勧めします。

悪い習慣その7:不十分な索引付け

場合によっては、多くの列でクエリを実行する必要があるテーブルがあります。テーブルが大きくなると、これらの列のSELECTが遅くなることがわかります。テーブルが十分に大きい場合、論理的には、このテーブルへのアクセスに使用する各列にインデックスを作成して、SELECTのパフォーマンスは向上するが、INSERT、UPDATE、およびDELETEが低下することをほぼ即座に見つけることができます。もちろん、これは、インデックスをテーブルと同期させておく必要があるためです。これは、DBEにとって大きなオーバーヘッドを意味します。これは、さまざまな方法で解決できるオーバーインデックスの典型的なケースです。たとえば、テーブルのクエリに使用する主キーとは異なるすべての列に1つのインデックスしかない場合、これらの列を使用頻度の高いものから低いものの順に並べると、すべてのCRUD操作で列ごとに1つのインデックスよりもパフォーマンスが向上する可能性があります。

一方、クエリに使用される列にインデックスがないテーブルがあると、ご存知のとおり、SELECTのパフォーマンスが低下します。

また、インデックス効率は列タイプに依存する場合があります。 INT列のインデックスは可能な限り最高のパフォーマンスを示しますが、VARCHAR、DATE、またはDECIMALのインデックス(意味がある場合)はそれほど効率的ではありません。この考慮事項は、可能な限り最高の効率でアクセスする必要があるテーブルの再設計につながる可能性さえあります。

したがって、インデックス作成は常に微妙な決定です。インデックス作成が多すぎると少なすぎるだけでなく、インデックスを作成する列のデータ型が最終結果に大きな影響を与えるためです。

悪い習慣その8:不十分な命名規則

これは、プログラマーが既存のデータベースに直面するときに常に苦労することです。多くの場合、他の方法がないため、テーブルと列の名前でデータベースに格納されている情報を理解します。

テーブル名は、それが保持するエンティティを説明する必要があり、各列名は、それが表す情報を説明する必要があります。これは簡単ですが、テーブルを相互に関連付ける必要がある場合は複雑になり始めます。名前が乱雑になり始め、さらに悪いことに、非論理的な規範と混同する命名規則がある場合(たとえば、「列名は8文字以下でなければならない」など)。最終的な結果は、データベースが読み取れなくなることです。

パワーポイントのプレゼンテーションのヒントとコツ

したがって、 命名規則 データベースが持続し、サポートするアプリケーションとともに進化することが期待される場合は常に必要です。簡潔でシンプルで読みやすいデータベースを確立するためのガイドラインを次に示します。

  • テーブルまたは列の名前のサイズに制限はありません。誰も覚えたり理解したりしない頭字語よりも、わかりやすい名前を付ける方がよいでしょう。
  • 等しい名前は同じ意味を持ちます。同じ名前で、タイプや意味が異なるフィールドは避けてください。これは遅かれ早かれ混乱するでしょう。
  • 必要な場合を除いて、冗長にしないでください。たとえば、テーブル「Item」では、「ItemName」、「PriceOfItem」、または同様の名前のような列を持つ必要はありません。 「名前」と「価格」で十分です。
  • DBEの予約語に注意してください。列をSQL予約語である「Index」と呼ぶ場合は、「IndexNumber」などの別の列を使用してみてください。
  • 単純な主キールール(自動生成された単一の整数)に固執する場合は、すべてのテーブルで「Id」という名前を付けます。
  • 別のテーブルに結合する場合は、必要な外部キーを「Id」という名前の整数として定義し、その後に結合されたテーブルの名前(IdItemなど)を続けます。
  • 制約に名前を付ける場合は、制約を説明するプレフィックス(「PK」や「FK」など)を使用し、その後に関連する1つまたは複数のテーブルの名前を続けます。もちろん、アンダースコア( '_')を控えめに使用すると、読みやすくなります。
  • インデックスに名前を付けるには、プレフィックス「IDX」の後にテーブル名とインデックスの1つまたは複数の列を使用します。また、インデックスが一意の場合はプレフィックスまたはサフィックスとして「UNIQUE」を使用し、必要に応じてアンダースコアを付けます。

インターネット上には、データベース設計のこの非常に重要な側面にさらに光を当てるデータベース命名ガイドラインがたくさんありますが、これらの基本的なガイドラインを使用すると、少なくとも読み取り可能なデータベースにアクセスできます。ここで重要なのは、命名ガイドラインのサイズや複雑さではなく、ガイドラインに従う際の一貫性です。

いくつかの最後の発言

データベース設計は知識と経験の組み合わせです。ソフトウェア業界は、初期の頃から大きく進化してきました。幸いなことに、役立つ十分な知識があります データベース設計者 最良の結果を達成します。

優れたデータベース設計があります ガイドライン インターネット全体だけでなく 悪い習慣 そして 避けるべきこと データベース設計において。あなたのピックを取り、それに固執するだけです。

そして、忘れないでください。あなたが学ぶのは、実験、間違い、成功を通してのみです。ですから、今すぐ始めましょう。

SQLインデックスの説明、Pt。 2

バックエンド

SQLインデックスの説明、Pt。 2
WordPress開発者が犯す10の最も一般的な間違い

WordPress開発者が犯す10の最も一般的な間違い

バックエンド

人気の投稿
効果的なエンジニアリング管理のための根本的な率直なフレームワークの使用
効果的なエンジニアリング管理のための根本的な率直なフレームワークの使用
落ち着いて新しい開発チームに移行する
落ち着いて新しい開発チームに移行する
スマートソフトウェアの価格戦略の究極のガイド
スマートソフトウェアの価格戦略の究極のガイド
ボリビアの開発者YasettAcuranaが6回目のApeeScape奨学金を獲得
ボリビアの開発者YasettAcuranaが6回目のApeeScape奨学金を獲得
ミッションステートメント:効果的に使用された無形資産が企業価値を生み出す方法
ミッションステートメント:効果的に使用された無形資産が企業価値を生み出す方法
 
製品戦略:基本的な概念とプロセスのガイド
製品戦略:基本的な概念とプロセスのガイド
経験がすべて–究極のUXガイド
経験がすべて–究極のUXガイド
デザインニュース-世界中からのイノベーション
デザインニュース-世界中からのイノベーション
正確なデザイン– Adob​​eXDレビュー
正確なデザイン– Adob​​eXDレビュー
契約交渉-注意を払うべき欺瞞的な条項
契約交渉-注意を払うべき欺瞞的な条項
人気の投稿
  • 異文化コミュニケーションの障壁
  • 関数型プログラミングJavaScriptとは
  • クレジットカードのトップアップハック
  • ハッカーからオンラインでクレジットカードを購入する
  • nodejsコールバックは関数ではありません
  • SQLサーバーをOracleに移行する
カテゴリー
エンジニアリング管理 Uxデザイン 計画と予測 設計プロセス アジャイル 財務プロセス 投資家と資金調達 アジャイルタレント モバイルデザイン ブランドデザイン

© 2021 | 全著作権所有

apeescape2.com