SQL - NULL外键

w00*_*977 3 sql null foreign-keys

请看下面的数据库设计:

create table Person (id int identity, InvoiceID int not null) 
create table Invoice (id int identity, date datetime)
Run Code Online (Sandbox Code Playgroud)

目前,所有的人都有一个invoiceIDInvoiceIDnot null.

我想扩展数据库,以便某些人没有Invoice.原始开发人员讨厌空值而从不使用它们.我希望保持一致,所以我想知道是否有其他模式可用于扩展数据库以满足此要求.如何在不使用空值的情况下接近它?

请注意,上面的两个表格仅供参考.它们不是实际的表格.

Eli*_*ert 5

NULL通常是数据库和编程中非常重要的特性.它与零或任何其他值明显不同.它最常用于表示没有价值(虽然它也可能意味着未知的价值,但这不太用作解释).如果某些人没有发票,那么您应该真正允许NULL,因为它匹配您想要的架构

  • 几个众所周知的实践者表示,如果你在设计中拥有它,那么NULL是一个非常糟糕的错误 - 例如Chris Date.这是否意味着缺乏价值或未知,它如何影响选择和分组? (2认同)
  • NULL是一个重要的特性 - 好吧,让我们假设这是真的(因为我不认为这是问题的核心).然而,这个问题并不是关于"一般为空"(例如代表"缺失数据"),而是关于"null*外键*".我认为,虽然它可能使模型"稍微复杂一些" ",禁止零FK实际上使生活更加一致.它还避免了SQL Server的"问题",其中多个NULL值不被视为不同(例如,在唯一索引中). (2认同)