je dois expliquer par exemple:Base de données de conception préférence: L'utilisation d'un DateTime et un TBI dans SQL 2000
est-il une meilleure pratique ou la préférence pour spécifier un DateTime et BIT dans une table de base de données?
Dans ma base de données, j'ai une table Widget. J'ai besoin de savoir si un widget est "Fermé" et c'est "Date fermée" Les règles métier disent que si un widget est fermé, il doit avoir une date fermée. Si un widget n'est pas fermé, il ne doit pas avoir de "date de fermeture".
Pour concevoir, je pouvais faire ce qui suit:
(exemple 1):
CREATE TABLE [Widget]
(
[WidgetID] INT IDENTITY(1,1)
,[ClosedDate] DATETIME NULL
)
ou (exemple 2):
CREATE TABLE [Widget]
(
[WidgetID] INT IDENTITY(1,1)
,[IsClosed] BIT NOT NULL CONSTRAINT [DF_Widget_IsClosed] DEFAULT (0)
,[ClosedDate] DATETIME NULL
)
Je pense que l'exemple 1 est plus propre parce que c'est une colonne de moins à s'inquiéter. Mais, chaque fois que j'ai besoin d'évaluer si un widget est fermé, j'aurais besoin d'une étape supplémentaire pour déterminer si la colonne ClosedDate n'est pas NULL.
L'exemple 2 crée un surcoût supplémentaire car je dois maintenant synchroniser les valeurs IsClosed et ClosedDate.
Existe-t-il une meilleure pratique lors de la conception de quelque chose comme ça? L'interrogation de la table serait-elle plus performante pour l'exemple 2? Y a-t-il une raison pour laquelle je devrais choisir un design plutôt qu'un autre?
Remarque: j'accède à cette valeur via un outil ORM ainsi que des procédures stockées.
rendre le "IsClosed" une colonne calculée qui est vrai seulement lorsque ClosedDate n'est pas nulle - voir la réponse de JBrooks - vous donne le meilleur des deux scénarios! –