データベース制約の明確な定義は何ですか?データベースにとって制約が重要なのはなぜですか?制約のタイプは何ですか?
データベース制約の明確な定義は何ですか?データベースにとって制約が重要なのはなぜですか?制約のタイプは何ですか?
回答:
制約はデータベーススキーマ定義の一部です。
制約は通常、テーブルに関連付けられており、CREATE CONSTRAINT
またはCREATE ASSERTION
SQLステートメントで作成されます。
データベースのデータが従わなければならない特定のプロパティを定義します。列、テーブル全体、複数のテーブル、またはスキーマ全体に適用できます。信頼性の高いデータベースシステムは、制約が常に保持されることを保証します(いわゆる遅延制約の場合、トランザクション内を除く)。
一般的な種類の制約は次のとおりです。
制約が必要な理由を理解するには、まずデータの整合性の価値を理解する必要があります。
データの整合性とは、データの有効性を指します。データは有効ですか?あなたのデータはあなたがそれらを設計したものを表していますか?
私があなたに尋ねる奇妙な質問は何だと思うかもしれませんが、残念なことに、データベースはガベージデータ、他のテーブルの行への無効な参照、長い間存在していません...そしてビジネスロジックにとって何の意味もない値でいっぱいですあなたのソリューションのもう。
このすべてのゴミは、パフォーマンスを低下させる傾向があるだけでなく、アプリケーションロジックの下の時限爆弾であり、最終的には理解するように設計されていないデータを取得します。
制約は、データが破損するのを防ぐために設計時に作成するルールです。それは、データベースソリューションの心臓の子供が長生きするために不可欠です。制約がなければ、あなたのソリューションは間違いなく時間と負荷の高い使用によって減衰します。
データベース設計の設計は、ソリューションの誕生にすぎないことを認めなければなりません。その後、それは(うまくいけば)長い間存続し、エンドユーザー(つまり、クライアントアプリケーション)によるあらゆる種類の(奇妙な)動作に耐えなければなりません。しかし、開発におけるこの設計フェーズは、ソリューションの長期的な成功にとって重要です。それを尊重し、必要な時間と注意を払ってください。
賢者はかつて「データは自分自身を守らなければならない!」と言っていました。。そして、これは制約が行うことです。データベース内のデータを可能な限り有効に保つのはルールです。
これには多くの方法がありますが、基本的には次のように要約されます。
sys.check_constraints
AdventureWorksサンプルデータベースのビューを確認してくださいここでほのめかしたように、データベース設計に最適で最も防御的な制約アプローチを構築するには、いくつかの徹底的な考慮が必要です。まず、上記のさまざまな制約タイプの可能性と制限を知る必要があります。さらに読むことができます:
幸運を!;)
制約は、データに関するルールにすぎません。有効なデータと無効なデータは、制約を使用して定義できます。したがって、そのデータの整合性を維持できます。以下は、広く使用されている制約です。
NOT NULL
。ここでは、特定の列に入力できるデータと、その列に予期されないデータを指定できます。制約により、データベース内のデータに有効な値が決まります。たとえば、値がnullではない(NOT NULL
制約)か、別のテーブルに一意の制約として存在する(FOREIGN KEY
制約)か、またはこのテーブル内で一意である(UNIQUE
制約またはPRIMARY KEY
要件に応じた制約)かを強制できます。 )。より一般的な制約は、制約を使用して実装できCHECK
ます。
の SQL Server 2008個の制約のためのMSDNドキュメントは、おそらくあなたの最高の出発点です。
UNIQUE
制約(そのPRIMARY KEY
制約はバリアントです)。特定のフィールドのすべての値がテーブル全体で一意であることを確認します。これはX
-axis制約です(レコード)
CHECK
制約(そのNOT NULL
制約はバリアントです)。同じレコードのフィールドで式の特定の条件が満たされていることを確認します。これはY
-axis制約です(フィールド)
FOREIGN KEY
制約。フィールドの値が別のテーブルのフィールドの値の中にあることを確認します。これはZ
-axis制約(テーブル)です。
CHECK
制約を使用して記述できるので、なぜ異なるものとして分類するのですか?つまり、 " Y
-axis"(それが何であれ)。
FOREIGN KEY
を使用してどのように実装しますCHECK
か?
SELECT
クエリです。のCHECK
制約では、サブクエリ(または現在のレコードの外部の値を参照するその他の構造)を使用できませんSQL Server
。
データベースは、一連の非公式なビジネスルールで構成される、概念(またはビジネス)モデルのコンピューター化された論理表現です。これらのルールは、ユーザーが理解するデータの意味です。コンピュータは正式な表現しか理解しないため、ビジネスルールをデータベースで直接表現することはできません。それらは、一連の整合性制約で構成される論理モデルである正式な表現にマップする必要があります。これらの制約(データベーススキーマ)は、ビジネスルールのデータベース内の論理表現であり、したがって、DBMSが理解しているデータの意味です。したがって、DBMSがビジネスルールを表す制約の完全なセットを認識していない、または適用していない場合、DBMSはデータの意味を完全に理解していないため、
注:DBMSの「理解された」意味—整合性の制約—はユーザーが理解した意味—ビジネスルールと同じではありませんが、一部の意味が失われているにもかかわらず、データからの論理的な推論を機械化する能力が得られます。
Fabian Pascalによる「古いクラスのエラー」
制約は特定の条件を検証できる条件です。データベースに関連する制約は、ドメインの整合性、エンティティの整合性、参照整合性、ユーザー定義の整合性制約などです。