IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Modèle relationnel de sql server 2005 et 2008


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 911
    Points : 51 666
    Points
    51 666
    Billets dans le blog
    6
    Par défaut
    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 +

  3. #3
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    Par défaut
    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)

Discussions similaires

  1. Réponses: 46
    Dernier message: 30/07/2013, 16h18
  2. Connecter une base Sql server 2005 ou 2008
    Par lucres84 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 19/10/2011, 14h54
  3. retro compatibilité SQL Server 2005 / Windows 2008
    Par j6m dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/06/2011, 12h04
  4. Réponses: 0
    Dernier message: 01/09/2009, 11h48
  5. Connecter Visual C# 2008 à MS SQL Server 2005
    Par stigma dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 19/05/2008, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo