Jon*_*Jon 2 t-sql database-design sql-server-2000
我需要通过例子来解释这个:
是否有在数据库表中指定DateTime和BIT的最佳实践或首选项?
在我的数据库中,我有一个Widget表.我需要知道一个小部件是否"已关闭"并且它是"关闭日期"业务规则说如果一个小部件关闭,它必须有一个关闭日期.如果窗口小部件未关闭,则不应具有"关闭日期".
为了设计这个,我可以做到以下几点:
(例1):
CREATE TABLE [Widget]
(
[WidgetID] INT IDENTITY(1,1)
,[ClosedDate] DATETIME NULL
)
Run Code Online (Sandbox Code Playgroud)
或(例2):
CREATE TABLE [Widget]
(
[WidgetID] INT IDENTITY(1,1)
,[IsClosed] BIT NOT NULL CONSTRAINT [DF_Widget_IsClosed] DEFAULT (0)
,[ClosedDate] DATETIME NULL
)
Run Code Online (Sandbox Code Playgroud)
我认为示例1更清晰,因为它不用担心会减少一个列.但是,每当我需要评估Widget是否已关闭时,我需要一个额外的步骤来确定ClosedDate列是否为非NULL.
示例2创建了额外的开销,因为现在我必须保持IsClosed和ClosedDate值同步.
在设计这样的东西时有最好的做法吗?对于示例2,查询表格会更有效吗?我有什么理由选择一种设计而不是另一种设计?
注意:我将通过ORM工具和存储过程访问此值.