すべての素晴らしい答えをありがとう、みんな。あなたは私に多くのことを考えさせてくれ、私が自分の意見/戦略を立てるのを手伝ってくれました。
その列のnullがアプリケーションにとって特定の意味を持つ場合に限り、nullを許可します。
nullの一般的な意味のいくつか:
- ユーザーから直接来るものすべて
- ここでnullは、「ユーザーが入力しなかった」ことを意味します
- これらの列については、nullを許可することをお勧めします。そうしないと、とにかくasdasd@asd.comタイプの入力を取得するだけです。
- 「0または1」関係の外部キー
- nullは、「関連する行がない」ことを意味します
- したがって、これらの列にはnullを許可します
- これは物議を醸していますが、これは私の意見です。
一般に、列内のnullの有用な意味を考えることができない場合は、である必要がありますNOT NULL
。後でいつでもnull許容に変更できます。
私が最終的に得たようなものの例:
create table SalesOrderLine (
Id int identity primary key,
-- a line must have exactly one header:
IdHeader int not null foreign key references SalesOrderHeader,
LineNumber int not null, -- a line must have a line number
IdItem int not null, -- cannot have null item
Quantity decimal not null, -- maybe could sell 0, but not null
UnitPrice decimal not null, -- price can be 0, but not null
-- a null delivery address means not for delivery:
IdDeliveryAddress int foreign key references Address,
Comment varchar(100), -- null means user skipped it
Cancelled bit not null default (0) -- true boolean, not three-state!
Delivered datetime, -- null means not yet delivered
Logged datetime not null default (GetDate()) -- must be filled out
)