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

MS SQL Server Discussion :

transfuge de Access à SQL SERVER 2008


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Par défaut transfuge de Access à SQL SERVER 2008
    bonjour.
    je suis nouveau en sql server 2008 que je trouve plus qu’intéressant. seulement voilà, en access, on peut indexer chaque champ d'une table "avec doublons" ou "sans doublons".
    je voudrais savoir où sql server donne la main pour indexer un champ d'une table.

    par ailleurs, la construction de certaines relations sous sql server me ramène le message d'erreur suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    table «*CONTRAT*» enregistrée
    table «*CUBAGE*»
    - Impossible de créer la relation «*FK_CUBAGE_CONTRAT*». 
    Introducing FOREIGN KEY constraint 'FK_CUBAGE_CONTRAT' on table 'CUBAGE' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
    Could not create constraint. See previous errors.
    je voulais relier les tables "contrat" et "cubage" par le champ "contrat" qui est une clé primaire dans la table "contrat"
    je voudrais savoir ce que signifie ce message et qu'est ce que je dois faire pour y remédier. je voudrais noter qu'en ACCESS, cette relation marche.

    merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    seulement voilà, en access, on peut indexer chaque champ d'une table "avec doublons" ou "sans doublons".
    C'est possible avec SQL Server :

    Si la colonne doit contenir des valeurs uniques :

    - Vous devez créer un index cluster
    - Cela peut se faire avec le concepteur de table ...
    - ... ou en ajoutant une contrainte de clé primaire : ALTER TABLE maTable ADD CONSTRAINT PK_maTable PRIMARY KEY(colonnes)
    - ... ou en ajoutant une contrainte d'unicité et en spécifiant que l'index sous-jacent à celle-ci doit être cluster : ALTER TABLE maTable ADD CONSTRAINT UQ_maTable_colonnes UNIQUE (colonnes) CLUSTERED
    - Notez qu'il ne peut y avoir qu'un seul index non-cluster par table

    Si la colonne contient des valeurs qui peuvent être en double, vous pouvez créer un index non-cluster :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE INDEX IX_maTable_mesColonnes
    ON maTable (mesColonnes)
    je voulais relier les tables "contrat" et "cubage" par le champ "contrat" qui est une clé primaire dans la table "contrat"
    je voudrais savoir ce que signifie ce message et qu'est ce que je dois faire pour y remédier. je voudrais noter qu'en ACCESS, cette relation marche.
    Sans le code et la structure des tables, difficile de vous aider ...

    @++

  3. #3
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Notez qu'il ne peut y avoir qu'un seul index non-cluster par table
    C'est le contraire, non ? Un seul index CLUSTERED et plusieurs NON CLUSTERED

  4. #4
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 210
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    Citation Envoyé par elsuket Voir le message
    Si la colonne doit contenir des valeurs uniques :
    - Vous devez créer un index cluster

    Si la colonne contient des valeurs qui peuvent être en double, vous pouvez créer un index non-cluster :
    Un index de type NON UNIQUE (valeurs en double acceptées) peut être CLUSTER, en conséquence de quoi le (ou les) index de type UNIQUE branchés sur une table peuvent ne pas être CLUSTER, quels qu'ils soient.

    Cela dit, qu'il soit UNIQUE ou pas, le choix de l'index CLUSTER est crucial, puisqu'on ne peut en avoir qu'un seul par table comme le rappelle SLE .
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #5
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 210
    Billets dans le blog
    16
    Par défaut
    Venons-en à votre message d’erreur. Vu sa teneur, on peut penser que les relations entre CONTRAT et CUBAGE ressemblent à ceci (en conformité avec la théorie relationnelle) :


    Le texte en bleu a trait au métabolisme des données (les structures des bases de données ne sont pas limitées qu’à leur seul aspect anatomique...) :

    « CASCADE » signifie qu’à l’occasion de la suppression d’un contrat, des stimuli partent simultanément l’un par la gauche (chemin A) et l’autre par la droite (chemin B), avec pour effet la suppression simultanée des cubages (que sont-ce donc ces choses-là ?) en relation avec ce contrat (l’émission de stimuli vaut aussi pour la modification des clés primaires : les valeurs des clés étrangères de CUBAGE doivent être en permanence égales à celles des clés primaires de CONTRAT, même si changer la valeur d’une clé primaire est quelque chose qui mérite qu’on se fasse taper sur les doigts). A l’opposé, si l’option retenue est « NO CASCADE » (RESTRICT ou NO ACTION selon les SGBD), la suppression d’un contrat n’est possible que si ce contrat n’est pas référencé, car s’il l’est, la tentative échouera.

    Dans le contexte ACCESS, l’équivalent du diagramme ci-dessus est le suivant (ACCESS est vraiment très mauvais pour représenter les diagrammes...) :


    Le problème avec SQL Server est que, parce que les stimuli peuvent emprunter deux chemins pour aller d’un point à un autre, en l’espèce les chemins A et B, alors si l’on a l’option « CASCADE » pour un chemin, l’option pour l’autre chemin doit impérativement être « NO ACTION » (le « NO CASCADE » de SQL Server). Cette exigence n’est pas normale et elle est due au fait que l’algorithme utilisé par ce SGBD est manifestement trop fruste. Ma remarque valait du reste pour DB2 quand enfin on put mettre en œuvre l’intégrité référentielle avec ce SGBD (c’était en 1988). La partie cocasse de cette affaire est qu’avec DB2, si pour un chemin, on retenait l’option « CASCADE », alors pour l’autre chemin c’était obligatoirement « CASCADE » itou ! On avait même droit à la justification de ce choix (désolé, je n’ai pas la justification valant pour SQL Server, mais un MVP palliera sans doute mon incurie) :


    Il est évident qu’à la réflexion, du fait d’un algorithme trop fruste les arguments des parents de DB2 ne tiennent pas la route (pas plus que ceux des parents de SQL Server, ACCESS serait donc meilleur sur ce point ? ) Quoi qu’il en soit, le principe général de l’algorithme permettant de gommer les dangers évoqués par IBM est fourni par Chris Date, dans Database Explorations, Essays on The Third Manifesto and Related Topics, à la page 224.

    En ce qui vous concerne, vous serez malheureusement obligé de vous plier aux exigences de SQL Server : « CASCADE » d’un côté et « NO ACTION » de l’autre... Soit vous le faites directement dans la base de données ACCESS, soit vous interceptez la contrainte de clé étrangère coupable pour y modifier l’option. Si le choix du chemin à passer en « NO ACTION » est problématique d'un point de vue sémantique, vous pourrez exposer ici la difficulté qui se présente.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut
    Waw ! ça c'est de la réponse !
    +1

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Citation Envoyé par SLE
    C'est le contraire, non ? Un seul index CLUSTERED et plusieurs NON CLUSTERED
    Héhé si, il était vraiment trop tard quand j'ai écrit ce message ... Merci de l'avoir relevé

    Citation Envoyé par fmsrel
    Un index de type NON UNIQUE (valeurs en double acceptées) peut être CLUSTER, en conséquence de quoi le (ou les) index de type UNIQUE branchés sur une table peuvent ne pas être CLUSTER, quels qu'ils soient.

    Cela dit, qu'il soit UNIQUE ou pas, le choix de l'index CLUSTER est crucial, puisqu'on ne peut en avoir qu'un seul par table comme le rappelle SLE .
    Tout à fait, merci également d'avoir relevé ces deux erreurs.
    Toutes mes excuses à djelloharmel.

    Faut que je prenne des vacances moi

    @++

Discussions similaires

  1. [AC-2007] Conversion date heure Access au format BigInt SQL Server 2008
    Par PapouDomi dans le forum Access
    Réponses: 2
    Dernier message: 24/06/2015, 12h26
  2. Migration Access vers SQL-Server 2008
    Par SALIA LOUA OLIVIER dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/03/2012, 14h42
  3. Transfert Access SQL Server 2008
    Par phil5841 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 01/06/2011, 18h57
  4. sql server 2008 express import de table MS ACCESS
    Par mapmip dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/02/2010, 13h30
  5. Réponses: 0
    Dernier message: 27/10/2009, 12h24

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