列に何らかの値が入力されていることを確認する制約はどれですか? 主キーと非 null 制約の間で混乱しています。
3 に答える
NOT NULL
制約。
PK に参加するすべての列も許可する必要はありませんNULL
が、PK 制約はそれ以上のもの、一意性を保証します。つまり、テーブル内の 2 つの行が主キーに対して同じ値を持つことはできません。
SQL ServerNOT NULL
では、DDL で構文的に制約に名前を付けることができますが、他の制約とは異なり、実際には制約自体に対してメタデータ (名前を含む) が格納されません。
CREATE TABLE T
(
X INT CONSTRAINT NotNull NOT NULL
)
もう 1 点取り上げられていませんでした。NULL
と 空の文字列は 2 つの非常に異なるものですが、コミュニティの大部分は、それらを交換可能と見なしていることがよくあります。
varchar
列を次のように宣言できNOT NULL
ますが、それでもこれを行うことができます。
DECLARE @x TABLE(y VARCHAR(32) NOT NULL);
INSERT @x(y) VALUES('');
したがって、長さがゼロの文字列でもない有効な値があることを確認することが目標である場合はNULL
、チェック制約を追加することもできます。
DECLARE @x TABLE(y VARCHAR(32) NOT NULL CHECK (DATALENGTH(LTRIM(y)) > 0));
NOT NULL
フィールドに値があるという条件です。テーブル定義でフィールドを NOT NULL にして、レコードが挿入または更新されるたびにフィールドに常に値が入力されるようにすることができます。
主キーは、次の 3 つの条件を満たす必要があります。
- フィールドの値は NOT NULL です。
- 値は一意です。
- 値は不変です。
データベースは、一意のインデックスを使用して最初の 2 つの条件 (およびフィールドの非 null 条件) を適用できます。
3 番目の条件は、通常、データベースによって適用されません。通常、データベースでは主キー フィールドの変更が許可されるため、DBA はそれらを「修正」できます。つまり、管理者がキーを修正することを意図していない限り、キーを識別に使用し、値を変更するアプリケーションを作成しないことに同意するという点で、3 番目の条件はより哲学的です。
ここではフィールドを使用していますが、主キーは、条件を満たすフィールドの任意の組み合わせで構成される複合主キーにすることができます。最初の 2 つまたは 3 つすべての条件に一致するフィールドの任意の組み合わせは、候補キーと呼ばれます。
主キーとして使用できる候補キーは 1 つだけです。どちらかは恣意的な選択です。