Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/06/2008, 10h56   #1
Membre actif
 
Homme Fabian Mathese
Administrateur de base de données
Inscription : juillet 2007
Messages : 190
Détails du profil
Informations personnelles :
Nom : Homme Fabian Mathese
Localisation : Luxembourg

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2007
Messages : 190
Points : 176
Points : 176
Par défaut Modèle relationnel de sql server 2005 et 2008

Bonjour,

J'ai un soucis relationnel avec sql server 2005,

En effet j'ai des tables de ce style-ci :

Adresse (int numadresse, char......)
Client (int numclient, adresselivraison, adresseFacture)

je veux créer une relation entre Client et Adresse pour l'adresse de livraison, jusque la aucun soucis
je veux créer une deuxième relation entre client et adresse pour l'adresse de facture, toujours aucun soucis

La ou les soucis commence, je veux créer mes relations de la manière suivante :

Code :
1
2
3
4
ALTER TABLE [dbo].[DLIV]  WITH CHECK ADD  CONSTRAINT [FK_DLIV_DADR01] FOREIGN KEY([DLIV05F])
REFERENCES [dbo].[DADR] ([DADR01K])
ON UPDATE CASCADE
ON DELETE NO ACTION
Mais sql server 2005 refuse catégoriquement d'avoir 2 update cascade sur la même table.

L'erreur est "connue" (et ce n'est malheureusement pas un bug), on ne peut établir 2 cascades sur la même table en sql server (c'est ce que j'ai trouvé sur le net).
Je vais donc surement essayé de me débrouiller avec un trigger update... chiant mais bon.

Ma première question serait donc, est-ce que ce que j'ai trouvé sur le net est bien correct? Aucun moyen de contourner ce problème a part créer un trigger, et c'est un mécanisme existant partout sauf en sql server.

Deuxième question qui m'interresse plus, pour ceux ayant testé Sql server 2008, Microsoft a t il changé son fusil d'épaule a ce niveau la en 2008 ou ne peut on toujours pas le faire?

Merci a vous pour vos réponses
__________________
Fabian M. - DBA Sql server 2008R2.
Apprenti Admin Système 2008 R2
Développeur SSRS, SQL
Développement C# en hobby
oadin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h57   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 793
Points : 17 793
Mettre les IR en DELETE CASCADE est dangereux :
  • les performances peuvent être catastrophiques
  • les blocages seront nombreux
  • fonctionnellement cela peut conduire à des impasses.
C'est pourquoi il existe de telles limites et il est souhaitable de faire du SET NULL ou du SET DEFAULT et donc de reporter le nettoyage des lignes obsolètes dans des batchs qui s'exécutent aux heures creuses...

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 16h52   #3
Membre actif
 
Homme Fabian Mathese
Administrateur de base de données
Inscription : juillet 2007
Messages : 190
Détails du profil
Informations personnelles :
Nom : Homme Fabian Mathese
Localisation : Luxembourg

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2007
Messages : 190
Points : 176
Points : 176
en fait le delete, je l'ai mis en no action.

C'est l'update surtout qui m'interresse, je dois renuméroter des clés primaire.... je n'aime pas trop ça mais je n'ai pas le choix.

Je n'ai pas envie de passer partout ou mes clés étrangères existent donc un update cascade m'arrangeait bien dans cette situation. (Ormis ce cas particulier, j'évite que l'on change les clés primaire)

Je suppose que je dois donc créer ma clé étrangère sur la première occurence et un trigger pour la deuxième occurence?

Je vais regarder sur le net si je trouve pas demain, mais si par hasard qq'un avait le script rapidement sous la main, quel genre de trigger serait adapté a ce genre de scénario? un instead update semble déconseillé mais un after update semble ne pas fonctionner.

(j'avoue que un set null m'aurait bien arrangé mais je ne peux pas non plus en mettre 2 sur la même table)
__________________
Fabian M. - DBA Sql server 2008R2.
Apprenti Admin Système 2008 R2
Développeur SSRS, SQL
Développement C# en hobby
oadin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h10.


 
 
 
 
Partenaires

Hébergement Web