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

Langage SQL Discussion :

Contrainte double sens


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Contrainte double sens
    Bonjour, j'aimerai pouvoir faire une contrainte multi sens sur deux tables.
    le but est d'avoir une correspondance entre la référence interne et celle d'autres fournisseurs en privilégiant les valeurs du fournisseur le plus important

    voilà les tables

    interne
    -----------
    id | nom | fournisseur_id_auto_prefered
    1 | jambon | 1
    2 | fromage |4

    fournisseurs
    ---------------------------
    id_auto | interne_id | id_fournisseur | nom | valeur_a | produit
    1 | 1 | 212354 | super machin | bla | jambon
    2 | 1 | 1567461 | super truc | bli | jambon (variante)
    3 | 1 | 2154354 | chose | bli | jambon (variante2)
    4 | 2 | 212354 | hyper chose | bla | fromage (variante)
    5 | 2 | 1567462 | super machin | bli | fromage
    6 | 2 | 2154355 | chose | bli | fromage (variante 2)

    Le problème c'est que je peux faire la PK que dans un sens. sinon ça bloc la création du schéma.

    Avez vous une idée? nom but est d'accélérer les SELECT car il y a beaucoup plus de requête SELECT qu'INSERT et le faite d'avoir la valeur préféré me permet d'attaquer la table sans avoir le poids du JOIN dans la requête ou un booléen dans la table fournisseur avec un INDEX pour filtrer les préférences.

    Merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Vraiment difficile de comprendre le contexte du besoin exprimé, proposer un MCD aurait sans doute été plus parlant. Dans ce cas de figure, les contraintes de clés primaires semble être pour la table "interne" être "ID" et "nom" pour la table "fournisseur" la colonne produit n'a du coup rien à y faire puisqu'elle est désignée dans la table interne sous le champ "nom", il faut créer une clé étrangère sur la table fournisseur indiquant que "interne_id" fait référence à "ID" de la table interne. Et pour choisir la valeur fournisseur_id_auto_prefered, il va falloir réaliser une requête ou procédure stockée en maximisant ou minimisant cette valeur en fonction de ce que signifie cette valeur. En tout état de cause, celà ressemble grandement à un héritage !
    Dernière modification par Chtulus ; 21/11/2012 à 20h33.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 739
    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 739
    Points : 52 451
    Points
    52 451
    Billets dans le blog
    5
    Par défaut
    Il est tout à fait possible de réaliser une contrainte référentielle circulaire entre deux tables A=>B et B=>A, à condition que votre SGBDR supporte les contraintes déferrable, ce qui n'est pas le cas général...
    Lisez l'article que j'ai écrit à ce sujet : http://blog.developpez.com/sqlpro/p6...t_deferabilite
    Vous trouverez plus d'information dans mon livre sur SQL...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par cladsous Voir le message
    Vraiment difficile de comprendre le contexte du besoin exprimé, proposer un MCD aurait sans doute été plus parlant. Dans ce cas de figure, les contraintes de clés primaires semble être pour la table "interne" être "ID" et "nom" pour la table "fournisseur" la colonne produit n'a du coup rien à y faire puisqu'elle est désignée dans la table interne sous le champ "nom", il faut créer une clé étrangère sur la table fournisseur indiquant que "interne_id" fait référence à "ID" de la table interne. Et pour choisir la valeur fournisseur_id_auto_prefered, il va falloir réaliser une requête ou procédure stockée en maximisant ou minimisant cette valeur en fonction de ce que signifie cette valeur. En tout état de cause, celà ressemble grandement à un héritage !
    Salut,
    Rien à avoir avec un héritage. Tu mets l'héritage en place quand tu as plus d'une table enfant possédant des champs connexes. Puis en Postgresql ça pose des problèmes sur certains type de requête. Mais j'ai pas parlé du SGBD car je souhaite connaitre le standard SQL primordialement.


    Notre amis SQL Pro m'a bien éclairé. C'est donc que m'a demande était assez clair. Je souhaite faire une clé déferrable.

    J'utilise Django pour faire mon modèle et par défaut il crée des clés déferrables et Postgresql les supportes parfaitement. Donc c'est OK. le problème vient de l'ordre de résolution des appels aux classes lors de la contruction. J'ai un ami qui vient de m'expliquer que la seconde FK appelée doit être déclaré comme String et non comme Objet donc je vais tester. Sinon merci pour le suivi et pour vos renseignements.

    Je mettrais le bout de SQL une fois terminé car le Python c'est pas vraiment l'endroit.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 739
    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 739
    Points : 52 451
    Points
    52 451
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par gglafouine Voir le message
    J'utilise Django pour faire mon modèle et par défaut il crée des clés déferrables et Postgresql les supportes parfaitement. Donc c'est OK. le problème vient de l'ordre de résolution des appels aux classes lors de la contruction. J'ai un ami qui vient de m'expliquer que la seconde FK appelée doit être déclaré comme String et non comme Objet donc je vais tester. Sinon merci pour le suivi et pour vos renseignements.
    Je vous souhaite bien du plaisir avec ce framework qui ressemble d'ailleurs plus à un ORM qu'un framework... Car vous allez souffrir si vous voulez à la fois les performances et des transactions complexes. Ce genre d'outil est fait pour développer rapidement mais hélas produit un code SQL catastrophiquement pauvre et donc aux performances nulles quand ce n'est pas inexploitable (vous vous amuserez bien lors de la montée en charge).

    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/b...s-epaisses.pdf

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Django contient effectivement un Objet Réellement Merdique mais il semble quand même possible d'écrire des requêtes en SQL, même si les exemples donnés sont extrêmement simples (qui de requêtes plus complexes ? )
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je viens de lire l'article de SQLPro et j'avoue que malgré la lecture je n'ai toujours rien compris à ce qu'est defferable. Ma curiosité reste entière.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Je crois que c'est ça :
    Citation Envoyé par SQLPro
    Le déferrement n’intervient que dans une transaction et si contraintes déférée il y a, alors la vérification de la contrainte sera effectuée au moment du COMMIT et non à chaque ordre SQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Invité
    Invité(e)
    Par défaut
    Après quelques recherches je crois comprendre que le defered est un attribut que l'on donne à une contrainte; reprenez moi si je me trompe. Je serait curieux de voir l'implémentation de cette clé déférable pour mieux comprendre son intérêt et la nécessité d'implémenter ce genre de truc.

    Et pour revenir sur la question initiale de l'auteur, je ne comprends toujours pas pourquoi sa modélisation est n'est pas normalisée, mais peut-être est-ce nécessaire dans ce cas de figure.

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par cladsous
    je ne comprends toujours pas pourquoi sa modélisation est n'est pas normalisée
    Citation Envoyé par gglafouine
    interne
    -----------
    id | nom | fournisseur_id_auto_prefered
    1 | jambon | 1
    2 | fromage |4

    fournisseurs
    ---------------------------
    id_auto | interne_id | id_fournisseur | nom | valeur_a | produit
    1 | 1 | 212354 | super machin | bla | jambon
    2 | 1 | 1567461 | super truc | bli | jambon (variante)
    3 | 1 | 2154354 | chose | bli | jambon (variante2)
    4 | 2 | 212354 | hyper chose | bla | fromage (variante)
    5 | 2 | 1567462 | super machin | bli | fromage
    6 | 2 | 2154355 | chose | bli | fromage (variante 2)
    Pour la table bizarrement appelée "interne", c'est normalisé.

    Pour la table mal nommée "fournisseurs" (pas de pluriel pour commencer ! ), elle ne devrait contenir que les données des fournisseurs et pas des produits que ces fournisseurs fournissent. A minima, s'il s'agit d'indiquer le produit principal négocié avec le founisseur, il devrait y avoir une clé étrangère référençant "interne" et pas "jambon" ou "fromage".
    Et que vient faire cette "variante" ?
    Pourquoi y a t-il un id_auto + un id_fournisseur et pourquoi y a t-il deux fois l'id_fournisseur 212354 ?
    Sans les règles de gestion des données et/ou sans le MCD, il est difficile de se prononcer mais ça semble bien fouillis quand même !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/12/2013, 11h31
  2. Fonction OnClick (double sens)
    Par Kapov dans le forum Langage
    Réponses: 9
    Dernier message: 27/01/2012, 20h47
  3. [AC-2003] Liaison de table double sens
    Par Djromé dans le forum Modélisation
    Réponses: 1
    Dernier message: 24/01/2010, 10h46
  4. Hash table à double sens
    Par phfle1 dans le forum VB.NET
    Réponses: 2
    Dernier message: 15/07/2008, 15h10
  5. [texte] un texte a double sens ...
    Par notalp dans le forum Lectures
    Réponses: 31
    Dernier message: 27/07/2006, 11h12

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