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 :

Clé primaire multiples


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut Clé primaire multiples
    Bonjour à tous,

    J'ai deux questions par rapport à la création de clef primaire sur un champ.

    1/ Certains identifiants ne sont composés que de chiffres entiers, d'autres de chiffres et de lettre. Je me demandais sous quel format devait être ces id pour ne pas qu'il y ait de conflit? (integer, varchar?)

    2/ Je souhaiterais mettre une clef primaire sur un champ mais l'id à l'intérieur se répète et quand je valide, il y a conflit car certaines valeurs se répètent. Comment fait-on pour créer une clef primaire malgré cette répétition?

    3/ Je souhaiterais également mettre plusieurs clef primaire (un id classique et une année, voir un critère de filtrage sur un autre champ). Où peut-on voir ça?

    Je vous remercie.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 783
    Points
    30 783
    Par défaut
    Sais-tu que la clé primaire d'une table peut être composée de plusieurs colonnes ?
    Cela devrait répondre à certaines de tes questions
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Non je ne le savais pas.

    Cela répond à ma question 3/.
    Mais cela n’entraîne-t-il pas des conflits? (par exemple un champ année qui se répète).

    Par rapport à mes deux autres points: comment peut on éviter les conflits par rapport au format des clefs (toutes mes clefs sont en integer mais je viens de récupérer une table ou l'id contient des chiffres et des caractères.

    Merci pour les réponses.

  4. #4
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Bonjour,

    Citation Envoyé par Luern Voir le message
    1/ Certains identifiants ne sont composés que de chiffres entiers, d'autres de chiffres et de lettre. Je me demandais sous quel format devait être ces id pour ne pas qu'il y ait de conflit? (integer, varchar?)
    Qu'entendez-vous quand vous dites "pour ne pas qu'il y ait de conflit" ? Le type de la colonne utilisée comme clé primaire n'a pas d'importance.

    Citation Envoyé par Luern Voir le message
    2/ Je souhaiterais mettre une clef primaire sur un champ mais l'id à l'intérieur se répète et quand je valide, il y a conflit car certaines valeurs se répètent. Comment fait-on pour créer une clef primaire malgré cette répétition?
    Le principe d'une clé primaire est d'identifier une ligne de manière unique. Je ne comprend pas votre volonté de créer un PK sur une colonne contenant des valeurs non uniques.

    Citation Envoyé par Luern Voir le message
    3/ Je souhaiterais également mettre plusieurs clef primaire (un id classique et une année, voir un critère de filtrage sur un autre champ). Où peut-on voir ça?
    On ne peut pas créer plusieurs clés primaires sur une même table.
    En revanche, on peut créer une clé primaire composées de plusieurs colonnes comme l'a dit al1_24.

    De manière plus générale, ne confondez-vous pas un peu la notion d'index et de clé primaire ?

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    1/ Dans conflits, j'entends que lorsque je mets des clefs étrangères entre mes tables, si les deux n'ont pas le même format (une integer et l'autre en charac), il est impossible de les lier et il y a conflit.

    2/ Je vais prendre mon exemple: j'ai une table contenant des caractéristiques de logements (une ligne= un logement), une de ces caractéristiques et le nom de la commune. Forcément, il y a plusieurs logements par commune. J'aimerais lier cette table à ma table commune pour pouvoir connaitre le nombre de logements par commune. Mais je souhaiterais aller plus loin en ayant la possibilité de regrouper ces communes par Communauté de Communes, départements, etc...(qui sont sur une autre table).

    3/ Je ne pense pas confondre ces deux notions (enfin j'espère)... Mais pour reprendre mes exemples, j'aimerais suivre dans le temps l'évolution de ces logements. Un champ "année" me permettrait de ne pas multiplier à l'infini mes champs.
    J'ai cherché mais je ne trouve pas comment mettre plusieurs colonnes dans une clef primaire.

    Je vous remercie.

  6. #6
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir,

    Tout est possible mais est-ce une bonne conception ?

    quitte à faire sortir de leurs gonds certains j'ai travaillé avec des Bases ou la PK était AUTO et la FK en CHAR, une sur 12 et la dernière sur 9 !

    Idiot et très mal conçu sans être médisant ! D’où de requêtes idiotes !

    Auriez vous des exemples ?

    Les DDL de vos tables et le jeu d'essai je ne demande même pas, comme vous le présentez, une Hérésie !...

    Encore une fois @al1_24 a tout résumé en 2 phrases !

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Pour l'exemple, ma table Cdc est lié ma celle des communes par le code_cdc et je n'arrive pour l'instant pas à lié ma table commune à ma table logement.

    Table logement:

    Logement |Code_commune |annee
    a 12 1998
    b 12 1998
    c 11 2002
    d 13 1998
    e 12 2012

    Table Commune:

    Code_commune | libelle_commune|code_Cdc
    11 A X
    12 B X
    13 C Y

    Table Cdc

    code_Cdc | libelle_cdc
    X y
    Y x



    Je souhaiterais pouvoir exécuter mes requêtes pour arriver à un résultat de type

    Lib_geo | année 1 | année 2 | année 3

    A
    B
    C

    X
    Y

Discussions similaires

  1. suppression multiple, clé primaire multiple
    Par javaweb44 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/12/2006, 17h51
  2. creation d'une table avec une clé primaire multiple
    Par oursquetaire dans le forum Oracle
    Réponses: 2
    Dernier message: 23/12/2005, 13h29
  3. Clé primaire multiple
    Par Korskarn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/11/2005, 09h10
  4. Access 97 - Clés primaires multiples
    Par Korskarn dans le forum Access
    Réponses: 5
    Dernier message: 09/11/2005, 11h12
  5. Clé primaire multiple
    Par befb dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 12/07/2004, 16h38

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