Я должен объяснить это на примере:Database дизайн предпочтение: Использование DateTime и BIT в SQL 2000
Есть ли лучшая практика или предпочтения для указания DateTime и БИТ в таблице базы данных?
В моей базе данных У меня есть таблица виджета. Мне нужно знать, является ли виджет «закрытым», и это «Закрытая дата». В бизнес-правилах говорится, что если виджет закрыт, он должен иметь закрытую дату. Если виджет не закрыт, он не должен иметь «Закрытую дату».
Для разработки этого, я мог бы сделать следующее:
(пример 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 NOT NULL.
Пример 2 создает дополнительные накладные расходы, потому что теперь мне нужно синхронизировать значения IsClosed и ClosedDate.
Есть ли лучшая практика при разработке чего-то подобного? Будет ли запрос таблицы более результативным для примера 2? Есть ли причина, по которой я должен выбрать один дизайн над другим?
Примечание: Я получаю доступ к этому значению с помощью инструмента ORM, а также хранимых процедур.
сделать «IsClosed» вычисленным столбцом, который является истинным только тогда, когда ClosedDate не является нулевым - см. Ответ JBrooks - дает вам лучшее из обоих сценариев! –