データベース制約の明確な定義とは何ですか?データベースにとって制約が重要なのはなぜですか?制約の種類は何ですか?
制約は、データベーススキーマ定義の一部です。
通常、制約はテーブルに関連付けられ、CREATE CONSTRAINT
またはCREATE ASSERTION
SQLステートメントで作成されます。
データベース内のデータが準拠しなければならない特定のプロパティを定義します。列、テーブル全体、複数のテーブル、またはスキーマ全体に適用できます。信頼性のあるデータベースシステムにより、制約が常に保持されることが保証されます(いわゆる遅延制約の場合は、トランザクション内を除く)。
一般的な制約の種類は次のとおりです。
制約が必要な理由を理解するには、まずデータの整合性の価値を理解する必要があります。
データ整合性とは、データの有効性を指します。データは有効ですか?あなたのデータは、あなたがそれらを設計したものを表していますか?
私が尋ねる奇妙な質問は何ですか?しかし、残念なことに、データベースにはゴミデータ、他のテーブルの行への無効な参照、長いこと...、そしてビジネスロジックにとって何の意味もない値でいっぱいですもはやあなたのソリューションの。
このゴミはすべて、パフォーマンスを低下させる傾向があるだけでなく、最終的に理解するように設計されていないデータを取得するアプリケーションロジックの時限爆弾でもあります。
制約は、データが破損するのを防ぐために設計時に作成するルールです。データベースソリューションの心の子を長期間生存させるために不可欠です。制約がなければ、ソリューションは時間と使用量が増えると確実に劣化します。
データベース設計の設計は、ソリューションの誕生にすぎないことを認識する必要があります。その後、(願わくば)長く生き、エンドユーザー(クライアントアプリケーションなど)によるあらゆる種類の(奇妙な)動作に耐えなければなりません。しかし、開発におけるこの設計段階は、ソリューションを長期にわたって成功させるために重要です!それを尊重し、必要な時間と注意を払ってください。
賢者はかつて言った:「データはそれ自身を守らなければならない!」。そして、これが制約の役割です。データベース内のデータを可能な限り有効に保つのはルールです。
これを行うには多くの方法がありますが、基本的には次のように要約されます:
sys.check_constraints
ビューを確認しますここでほのめかしたように、データベース設計に最適で最も防御的な制約アプローチを構築するには、いくつかの徹底的な考慮が必要です。最初に、上記のさまざまな制約タイプの可能性と制限を知る必要があります。さらに読むには次を含めることができます。
幸運を! ;)
制約はデータのルールに他なりません。有効なデータと無効なデータは、制約を使用して定義できます。そのため、データの整合性を維持できます。広く使用されている制約は次のとおりです。
NOT NULL
など。ここで、特定の列に入力できるデータと、その列に予期しないデータを指定できます。制約を使用して、データの特定のプロパティを強制できます。簡単な例は、int列を値[0-100000]に制限することです。 これ 紹介は良さそうです。
制約により、データベース内のデータに有効な値が決まります。たとえば、値がnullでないこと(NOT NULL
制約)、または別のテーブルに一意の制約として存在すること(FOREIGN KEY
制約)、またはこのテーブル内で一意であることを強制できます。 (要件に応じてUNIQUE
制約またはPRIMARY KEY
制約)。 CHECK
制約を使用して、より一般的な制約を実装できます。
SQL Server 2008の制約に関するMSDNドキュメント は、おそらく最も良い出発点です。
データベースは、非公式のビジネスルールのセットで構成される、概念(またはビジネス)モデルのコンピューター化された論理表現です。これらのルールは、ユーザーが理解しているデータの意味です。コンピューターは正式な表現のみを理解するため、ビジネスルールをデータベースで直接表現することはできません。これらは、整合性制約のセットで構成される論理モデルである正式な表現にマッピングする必要があります。これらの制約(データベーススキーマ)は、ビジネスルールのデータベース内の論理表現であるため、DBMSが理解しているデータの意味です。したがって、DBMSがビジネスルールを表す制約の完全なセットを認識していない、または強制しない場合、データの意味を完全に理解していないため、(a)破損を防止してその整合性を保証することはできません。 (b)それから推論の整合性(つまり、クエリ結果)—これは、DBMSがせいぜい不完全であると言う別の方法です。
注:DBMSの「理解された」意味-整合性制約は、ユーザーが理解した意味-ビジネスルールと同一ではありませんが、何らかの意味が失われても、データから論理的な推論を機械化できます。
ファビアンパスカルによる「古いクラスのエラー」
UNIQUE
制約(そのうちPRIMARY KEY
制約はバリアントです)。特定のフィールドのすべての値がテーブル全体で一意であることを確認します。これはX
- axis constraint(records)です
CHECK
制約(そのうちNOT NULL
制約はバリアントです)。特定の条件が同じレコードのフィールドの式に対して成立することを確認します。これはY
- axis constraint(fields)です
FOREIGN KEY
制約。フィールドの値が別のテーブルのフィールドの値の中にあることを確認します。これはZ
- axis制約(テーブル)です。
SQLには、基本的に4種類の主な制約があります。
Domain Constraint:新しいタプルに指定された属性値のいずれかが指定された属性ドメインのものでない場合
キー制約:新しいタプルのキー属性の値がリレーションの別のタプルにすでに存在する場合
参照整合性:新しいタプルの外部キー値が、参照される関係に存在しない主キー値を参照する場合
Entity Integrity:新しいタプルの主キー値がnullの場合