我需要通过例子来说明这一点:数据库设计偏好:使用DateTime和SQL中的BIT 2000
是否有一个最佳做法或偏好数据库中的表指定DateTime和BIT?
在我的数据库中我有一个Widget表。我需要知道一个小部件是否“关闭”,并且它是“关闭日期”业务规则说,如果小部件关闭,它必须有一个关闭日期。如果一个小部件没有关闭,它不应该有“关闭日期”。
为了设计此,我可以执行以下操作:
(实施例1):
CREATE TABLE [Widget]
(
[WidgetID] INT IDENTITY(1,1)
,[ClosedDate] DATETIME NULL
)
或(实施例2):
CREATE TABLE [Widget]
(
[WidgetID] INT IDENTITY(1,1)
,[IsClosed] BIT NOT NULL CONSTRAINT [DF_Widget_IsClosed] DEFAULT (0)
,[ClosedDate] DATETIME NULL
)
我认为实施例1是清洁器因为这是一个不必担心的专栏。但是,无论何时我需要评估一个Widget是否已关闭,我都需要额外的一步来确定ClosedDate列是否为NULL。
示例2会产生额外开销,因为现在我必须保持IsClosed和ClosedDate值同步。
在设计这样的东西时,是否有最佳实践? 查询表格对于例子2来说性能更高吗?我有什么理由选择另一种设计吗?
注意:我将通过ORM工具以及存储过程访问此值。
使“IsClosed”成为计算列,只有当ClosedDate不为空时才为true - 请参阅JBrooks的答案 - 为您提供两种方案中最好的方法! – 2009-09-04 05:08:13