SQLでは、外部キーの概念は、業界で使用されているすべてのプロのデータベースで見つけることがで コアアイデアは、(少なくともオブジェクト間の関係に関する限り)テーブルの正確さを保証する制約を強制することによって、PostgreSQLデータベースが矛盾したデー したがって、参照整合性は、これまでに発明された最も重要な概念の1つです。

しかし、外部キーは、アプリケーションを書くときに世話をしなければならないいくつかの問題を導入します。 外部キーがない場合は、任意の順序で任意のテーブルにデータを挿入できます。 PostgreSQLは気にしません。 ただし、外部キーが配置されている場合は、順序が重要になります(少なくとも一般的なシナリオでは重要ですが、後で詳しく説明します)。

外部キーと注文

注文の重要性を示すために、最初にデータモデルを作成する必要があります。

通貨、製品、および製品の説明を格納します。 基本的には非常に単純なデータモデルです。 Productテーブルに挿入するかどうかを見てみましょう:

論理的には、通貨番号1がまだ存在しないため、最初の挿入は失敗します。 挿入する場合は、NULL値(=不明な通貨)を使用する必要があります。 順番に言えば、最初に通貨テーブルを入力してから、場所を挿入するなどする必要があります。 デフォルトの場合、順序は重要です。

外部キーの正しい挿入順序を決定する

既存のデータモデルの使用を開始する必要がある場合、このようなものの周りに頭を包むのは少し難しい 空のデータモデルを作成するのは少し難しい場合があります。 では、データを挿入する順序を示すクエリを記述しないのはなぜですか?さて、ここにその魔法のクエリがあります…

クエリは読むのは簡単ではありませんが、私はそれを少し文書化するために最善を尽くしました。 基本的に、PostgreSQLシステムテーブルには、正しい順序を決定するために必要なすべての情報があります。 出力は次のとおりです:

 table_name | level-----------------+------- t_currency | 1 t_location | 1 t_product | 2 t_product_desc | 3 t_product_stock | 3(5 rows)

ご覧のとおり、クエリはテーブルを適切な順序で正しく提供しています。 まず、レベル1などのすべてのテーブルに挿入する必要があります。 この順序に固執すると、参照整合性が常に保証されます(データが正しいと仮定します)。

“最初に延期された”制約を利用する

場合によっては、挿入順序が対処するのが厄介なことになる可能性があります。 PostgreSQLに順序を無視し、代わりにコミット時に整合性をチェックするように指示する手段があった場合はどうなりますか? これはまさに「最初に延期された」ことです。 この場合、任意の順序でデータを変更できます。 トランザクションの終了時に整合性が損なわれないことが保証されている限り、PostgreSQLは完全に問題ありません。 PostgreSQLは制約チェックを延期し、開発者に負担をかけます。最後に…

最後に…

高度なSQLについてもっと知りたい場合は、より高度なウィンドウ関数(ties付き)についての私のブログを見てみてください。 だから、あなたのネクタイを入れて、より多くを学ぶために読みます。

コメントを残す

メールアドレスが公開されることはありません。