Utilisation de fonctions personnalisées avec des contraintes de vérification dans SQL Server 2008
Dans SQL Server 2008, la gestion de l'intégrité des données entre plusieurs tables peut s'avérer difficile. Cet article aborde un problème spécifique lié au maintien de données cohérentes entre les tables de lieux et d'événements.
Énoncé du problème
Une fonction personnalisée est requise pour implémenter une contrainte de vérification qui garantit que le event_expected_attendance dans le tableau des événements ne dépasse jamais le venue_max_capacity dans le tableau des lieux. Cependant, la complexité de la jointure de plusieurs tables et la syntaxe des fonctions personnalisées présentent un défi.
Solution
Lorsque l'implémentation d'une contrainte de vérification avec une fonction définie par l'utilisateur (UDF) peut impact sur les performances, le code suivant fournit une solution fonctionnelle :
CREATE FUNCTION dbo.CheckVenueCapacity (@venue_id int, @capacity int) RETURNS int AS BEGIN DECLARE @retval int SELECT @retval = CASE WHEN venue_max_capacity >= @capacity THEN 0 ELSE 1 END FROM venues WHERE venue_id = @venue_id RETURN @retval END; GO ALTER TABLE events ADD CONSTRAINT chkVenueCapacity CHECK (dbo.CheckVenueCapacity(event_venue_id, event_expected_attendance) = 0);
Cette fonction, CheckVenueCapacity, prend le venue_id et le attendu fréquentation comme paramètres d'entrée et renvoie 0 si la fréquentation attendue se situe dans la capacité maximale du lieu, sinon elle renvoie 1. La contrainte de vérification chkVenueCapacity est ensuite ajoutée à la table des événements pour appliquer cette condition. En utilisant une fonction personnalisée dans la contrainte de vérification, vous pouvez maintenir l'intégrité des données entre les tables des lieux et des événements.
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!