Contraintes uniques non NULL sur les colonnes NULLables
Il est souvent souhaitable d'imposer l'unicité sur une colonne tout en autorisant les valeurs nulles. Cependant, créer un index unique sur une colonne NULLable dans SQL Server 2005 peut s'avérer difficile.
Solutions actuelles
Une solution de contournement courante consiste à créer un index unique sur une colonne matérialisée. vue qui exclut les valeurs nulles :
CREATE VIEW vw_unq WITH SCHEMABINDING AS SELECT Column1 FROM MyTable WHERE Column1 IS NOT NULL CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)
Mieux Alternatives
SQL Server 2008 a introduit les index filtrés, qui offrent une meilleure solution :
CREATE UNIQUE INDEX AK_MyTable_Column1 ON MyTable (Column1) WHERE Column1 IS NOT NULL
Cet index autorise les valeurs nulles tout en appliquant l'unicité aux valeurs non nulles.
Option supplémentaire : déclencheurs
Une autre alternative consiste à créer un déclencheur pour vérifier l'unicité lors des opérations d'insertion et de mise à jour :
CREATE TRIGGER trg_MyTable_CheckUnique ON MyTable AFTER INSERT, UPDATE AS BEGIN IF EXISTS(SELECT * FROM MyTable WHERE Column1 = NEW.Column1 AND Column1 IS NOT NULL) BEGIN RAISERROR('Duplicate value for Column1.', 16, 1) END END
Cependant, les déclencheurs peuvent avoir un impact sur les performances, en particulier sur les systèmes à haute concurrence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!