リレーショナルデータベースのデザインパターン?
-
02-07-2019 - |
質問
デザインパターンは通常、オブジェクト指向のデザインに関連しています。
リレーショナルデータベース?
多くの問題には必ず再利用可能な解決策が必要です。
例には、テーブル設計、ストアドプロシージャ、トリガーなどのパターンが含まれます。
martinfowler.com に似た、このようなパターンのオンラインリポジトリはありますか?
パターンが解決できる問題の例:
- 階層データの保存(例:タイプのある単一のテーブルと、1:1のキーと違いのある複数のテーブル...)
- 変数構造でデータを保存する(例:汎用列vs xml vs区切り列...)
- データの非正規化(影響を最小限に抑える方法など)
解決
Martin Fowlerの署名シリーズには、データベースのリファクタリングという本があります。データベースをリファクタリングするためのテクニックのリストを提供します。データベースパターンのリストをあまり聞いたことはありません。
また、デイビッドC.ヘイのデータモデルパターンとフォローアップ最初のメタデータマップ。これははるかに野心的で興味深いものです。序文だけでも啓発的です。
あらかじめ用意されているデータベースモデルを探すのに最適な場所は、Len Silverstonのデータモデルリソースブックシリーズボリューム1 には普遍的に適用可能なデータモデル(従業員、アカウント、配送、購入など)が含まれ、ボリューム2 には業界固有のデータモデル(会計、ヘルスケアなど)、ボリューム3 はデータモデルパターンを提供します。
最後に、この本は表面上はUMLとオブジェクトモデリングに関するものですが、Peter Coadの UMLによるカラーモデリング 「アーキタイプ」を提供します;オブジェクト/データモデルには4つのコアアーキタイプがあるという前提から始まるエンティティモデリングの駆動プロセス
他のヒント
これは、数百の無料のデータベーススキーマを開発した紳士へのリンクです。
http://www.databaseanswers.org/data_models/
おそらく、データベースを迅速に構築する必要がある場合、これにより、特定のスキーマ内のテーブルと関係の観点から出発点が得られます。おそらくこの開始点を変更する必要があることに留意してください。とても便利だと思いました。
第二に、SQL Server Magazineには、「The Data Modeler」と呼ばれる不定期のコラムがあります。これは非常に教育的であり、多くの場合、特定のシステムの完全なスキーマが含まれています。
デザインパターンは、簡単に再利用できるソリューションではありません。
定義により、設計パターンは再利用可能です。これらは、他の優れたソリューションで検出されるパターンです。
パターンは簡単に再利用できません。ただし、パターンに従ってダウンデザインを実装できます。
リレーショナルデザインパターンには次のようなものが含まれます。
-
外部キーを使用した1対多の関係(主従関係、親子)関係。
-
ブリッジテーブルとの多対多の関係。
-
FK列のNULLで管理されるオプションの1対1の関係。
-
スタースキーマ:ディメンションとファクト、OLAPデザイン。
-
完全に正規化されたOLTP設計。
-
ディメンション内の複数のインデックス付き検索列。
-
"ルックアップテーブル"これには、1つ以上のアプリケーションで使用されるPK、説明、およびコード値が含まれます。なぜコードがあるのですか?わかりませんが、使用する必要がある場合、これはコードを管理する方法です。
-
ユニテーブル。 [これをアンチパターンと呼ぶ人もいます。これはパターンであり、悪い場合もあれば、良い場合もあります。]これは、2番目と3番目の標準形式に違反する、あらかじめ結合されたものがたくさんあるテーブルです。
-
配列テーブル。これは、列に値の配列またはシーケンスを持つことにより、最初の標準形式に違反するテーブルです。
-
混合使用データベース。これは、トランザクション処理用に正規化されたデータベースですが、レポートおよび分析用の追加のインデックスが多数あります。これはアンチパターンです。これをしないでください。とにかく人々がそれを行うので、それはまだパターンです。
データベースを設計するほとんどの人は、「もう1つ」の6分の1を簡単にガタガタ鳴らすことができます。これらは、定期的に使用するデザインパターンです。
そして、これには、使用および管理の管理上および運用上のパターンは含まれません。
このブログをご覧ください-データベースプログラマー。
彼はいくつかのデータベースパターンについて説明しています。
Joe Celkoの本はこの種のもの、特に「SQL for Smarties」に優れています。彼は一般的な問題に対するいくつかの革新的な解決策を持っています。そのほとんどは再利用可能な設計パターンです。
AskTom は、おそらくOracle DBのベストプラクティスに関する最も役立つ唯一のリソースです。 (通常、特定のトピックに関するGoogleクエリの最初の単語として" asktom"と入力します)
リレーショナルデータベースでデザインパターンを話すのは本当に適切だとは思いません。リレーショナルデータベースは既に「デザインパターン」のアプリケーションです。問題(「整合性を維持しながらデータをどのように表現、保存、操作するか」、および設計がリレーショナルモデルである)。他のアプローチ(一般的には時代遅れと見なされます)は、ナビゲーションモデルと階層モデルです(他にも多くのモデルが存在することを知っています)。
とはいえ、「データウェアハウジング」を検討することもできます。やや別個の「パターン」としてまたはデータベース設計のアプローチ。特に、スタースキーマについて読むことに興味があるかもしれません。
長年のデータベース開発の後、始める前に答えるべきいくつかの問題といくつかの質問があると言えます:
質問:
- 将来、別のDBMSで使用しますか? 「はい」の場合、現在のDBMSの特別なSQLに使用しません。アプリケーションのロジックを削除します。
使用しない:
- テーブル名と列名の空白
- 表名と列名に含まれる非ASCII文字
- 特定の小文字または大文字へのバインド。また、小文字と大文字のみが異なる2つのテーブルまたは列を使用しないでください。
- " FROM"、" BETWEEN"、" DELETE"などのテーブルまたは列名にSQLキーワードを使用しません
推奨事項:
- UnicodeサポートにNVARCHARまたは同等のものを使用すれば、コードページに問題はありません。
- すべての列に一意の名前を付けます。これにより、結合時に列が選択しやすくなります。すべてのテーブルに列「ID」がある場合は非常に困難です。または" Name"または「説明」。 XyzIDとAbcIDを使用します。
- 複雑なSQL式にはリソースバンドルまたは同等を使用します。別のDBMSに簡単に切り替えることができます。
- どのデータ型にも強くキャストしません。別のDBMSはこのデータ型を持つことができません。たとえば、OracleデータベースにはSMALLINTに数字のみがありません。
これが良い出発点であることを願っています。
あなたの質問は少しあいまいですが、 UPSERT
はデザインパターンと見なすことができます。 MERGE
を実装していない言語の場合、問題を解決するための多くの選択肢(適切な行が存在する場合、 UPDATE
;それ以外の場合は INSERT
)
パターンの意味に依存します。 Person / Company / Transaction / Productなどを考えているなら、はい-多くの汎用データベーススキーマがすでに利用可能です。
ファクトリー、シングルトンを考えているなら...いや-DBプログラミングには低すぎるので、これらは必要ありません。
データベースオブジェクトの命名を考えている場合、それ自体は設計のカテゴリではなく、慣習のカテゴリに属します。
ところで、S.Lott、1対多および多対多の関係は「パターン」ではありません。これらは、リレーショナルモデルの基本的な構成要素です。
Title: Data Patterns
By: Microsoft Corporation
Publisher: Microsoft Press
Pub. Date: December 21, 2004
Print ISBN-13: 978-0-7356-2200-5