Maison > base de données > tutoriel mysql > Comment puis-je appliquer efficacement des contraintes uniques sur les colonnes SQL Server autorisant les valeurs NULL ?

Comment puis-je appliquer efficacement des contraintes uniques sur les colonnes SQL Server autorisant les valeurs NULL ?

Mary-Kate Olsen
Libérer: 2025-01-04 09:11:36
original
573 Les gens l'ont consulté

How Can I Efficiently Enforce Unique Constraints on SQL Server Columns Allowing NULLs?

Indexation spécialisée pour les contraintes uniques sur les colonnes nulles

Dans la gestion des bases de données SQL Server, la question se pose concernant la création d'index uniques sur les colonnes qui autoriser les valeurs NULL. Les méthodes traditionnelles impliquent souvent de créer des vues avec des filtres pour renforcer l'unicité tout en prenant en compte les valeurs NULL. Cependant, des approches alternatives offrent des solutions plus efficaces.

Index filtrés pour l'application sélective de contraintes d'unicité

SQL Server 2008 et les versions ultérieures ont introduit des index filtrés, qui permettent la création d'index filtrés uniques. index sur des sous-ensembles de données spécifiques. Cette fonctionnalité s'avère particulièrement utile pour gérer les contraintes uniques sur les colonnes qui admettent des valeurs NULL.

Pour créer un index filtré pour une contrainte unique sur une colonne avec les valeurs NULL autorisées, suivez la syntaxe :

CREATE UNIQUE INDEX AK_MyTable_Column1 ON MyTable (Column1) WHERE Column1 IS NOT NULL;
Copier après la connexion

La clause WHERE dans la définition de l'index limite la portée de la contrainte d'unicité aux seules valeurs non NULL dans la colonne. Cela garantit que l'unicité est appliquée tout en permettant aux valeurs NULL d'exister dans la table.

Vérification de l'unicité basée sur un déclencheur

Une méthode alternative implique la création d'un déclencheur sur le table pour vérifier l’unicité avant d’insérer ou de mettre à jour des données. Ce déclencheur peut vérifier qu'aucune valeur unique en double n'est insérée, en maintenant la contrainte d'unicité.

L'exemple de déclencheur suivant peut être utilisé :

CREATE TRIGGER TR_MyTable_Unique
ON MyTable
FOR INSERT, UPDATE
AS
BEGIN
    IF EXISTS (
        SELECT *
        FROM MyTable
        WHERE Column1 = NEW.Column1
        AND Column1 IS NOT NULL
    )
    BEGIN
        RAISERROR('Duplicate unique value detected.', 16, 1);
    END;
END;
Copier après la connexion

Bien que les déclencheurs fournissent une alternative viable, ils peuvent introduire surcharge de performances, en particulier avec des niveaux élevés d'insertion ou de mises à jour de données.

En conclusion, les index filtrés présentent une approche plus efficace et sélective pour implémenter des contraintes uniques sur les colonnes avec NULL valeurs. Cependant, les vérifications d'unicité basées sur des déclencheurs peuvent constituer une option viable dans les environnements où les index filtrés ne sont pas pris en charge ou lorsqu'une logique de validation supplémentaire est requise.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal