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

SQL Oracle Discussion :

Clés primaires/étrangères obligatoires?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Par défaut Clés primaires/étrangères obligatoires?
    Bonjour,

    j'ai quelques questions au sujet d'une base de données très particulière que je dois traiter... Quelques tables sont assez volumineuses (plusieurs millions de lignes), voilà pourquoi je voulais créer des clés primaires/étrangères afin d'accélerer la recherche lors de futures jointures.

    J'ai donc une table T1 avec plusieurs informations, dont une clé primaire (numéro de téléphone).
    Je possède également une autre table T2 avec un champ numéro de téléphone également, mais ici de temps en temps certaines occurences sont en double (donc pas de clé étrangère possible de T1 vers T2).

    1ère question: les clés primaires et étrangères sont-elles forcément obligatoires dans une base de données?
    2ème question: si quelques tables n'ont pas de relations primaires/étrangères (mais possèdent pourtant des infos communes afin de les jointer), mais que d'autres dans la base sont elles reliées par des clés primaires/étrangères, est-ce grave?

    ps: je suis sous Oracle10g via Sql*Plus, bien que ce ne soit pas important ici

    Merci à tous

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je possède également une autre table T2 avec un champ numéro de téléphone également, mais ici de temps en temps certaines occurences sont en double (donc pas de clé étrangère possible de T1 vers T2).
    Mais vous pouvez faire une clef étrangère de T2 vers T1, après est-ce que c'est correct, je ne sais pas.

    1ère question: les clés primaires et étrangères sont-elles forcément obligatoires dans une base de données?
    Rien n'est obligatoire au niveau de la base de données, mais en terme de modélisation, si vous n'avez aucune contrainte ça peut être catastrophique.

    2ème question: si quelques tables n'ont pas de relations primaires/étrangères[...]
    Non ce n'est pas nécessairement grave ni faux... mais encore une fois ce n'est pas la partie base de donnée qui le requiert, mais la modélisation !

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par ganguill Voir le message
    ...Quelques tables sont assez volumineuses (plusieurs millions de lignes), voilà pourquoi je voulais créer des clés primaires/étrangères afin d'accélerer la recherche lors de futures jointures.
    Les clés n'accélère rien; ce sont les indexes qui servent à ça. Les clés sont la en principal pour assurer l’intégrité des données.

    Citation Envoyé par ganguill Voir le message
    ...
    Je possède également une autre table T2 avec un champ numéro de téléphone également, mais ici de temps en temps certaines occurences sont en double (donc pas de clé étrangère possible de T1 vers T2).
    Le fait que les valeurs sont en "double" (mais que est-ce que ça signifie vraiment) ne vous empêche pas de définir des clés étrangères.

    Citation Envoyé par ganguill Voir le message
    ...
    1ère question: les clés primaires et étrangères sont-elles forcément obligatoires dans une base de données?
    Non, mais fortement conseillées.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Par défaut
    Pour visualiser un peu le tout, partons du principe que je possède une table T1 comme ceci:
    T1
    TEL_T1 | NOM | PRENOM
    0445653433 | MARTIN | MICHEL
    etc..


    Et une table T2 comme ceci:
    T2
    TEL_T2 | VALEUR
    0445653433 | tata
    0445653433 | toto


    En testant donc de définir une clé étrangère de T2 vers T1 (solution proposée par Waldar), j'obtiens cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ALTER TABLE T2 ADD CONSTRAINT fk_TEL FOREIGN KEY(TEL_T2) REFERENCES T1(TEL_T1);
     
    ERREUR à la ligne 2 :
    ORA-02298: cannot validate (xxx.FK_ND) - parent keys not found

    Si je veux simplement créer une clé étrangère de T1 vers T2, j'obtiens cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE T1 ADD CONSTRAINT fk_TEL FOREIGN KEY(TEL_T1) REFERENCES T2(TEL_T2)
                                                                *
    ERREUR à la ligne 2 :
    ORA-02270: no matching unique or primary key for this column-list
    Pour cette deuxième solution, il semblerait qu'Oracle me demande que TEL_T2 soit unique ou clé primaire de T2...

    Donc là, je ne vois pas du tout ce que je peux faire pour relier ces deux tables

    ps: Merci beaucoup de votre aide

  5. #5
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    Ca veut dire que tu as des numéros de téléphones qui sont dans T2 et pas dans T1. Je ne sais pas si c'est normal, mais si c'est le cas t'es mal parti pour mettre une foreign key sur T2.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Par défaut
    Citation Envoyé par sgora Voir le message
    Ca veut dire que tu as des numéros de téléphones qui sont dans T2 et pas dans T1. Je ne sais pas si c'est normal, mais si c'est le cas t'es mal parti pour mettre une foreign key sur T2.

    Ben le problème c'est que c'est normal... Ces fichiers appartiennent à France Télécom. Maintenant je vais me renseigner afin de savoir si je peux voir quels numéros sont en trop dans T2, et surtout savoir si je peux les supprimer..

    Merci beaucoup pour l'aide en tout cas

  7. #7
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par ganguill Voir le message
    ...Si je veux simplement créer une clé étrangère de T1 vers T2 (donc solution de mnitu...
    J’apprécierais beaucoup si vous ne m’attribuez pas des choses que je n’ai jamais dites ou suggérées.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Par défaut
    Citation Envoyé par mnitu Voir le message
    J’apprécierais beaucoup si vous ne m’attribuez pas des choses que je n’ai jamais dites ou suggérées.
    Ne le prenez pas comme ça, je vais éditer.. au passage voilà quand même votre message : "Le fait que les valeurs sont en "double" (mais que est-ce que ça signifie vraiment) ne vous empêche pas de définir des clés étrangères.
    "
    Voilà pourquoi j'ai tout simplement tenté de créer une clé étrangère malgré ces valeurs en doubles dans T2. Maintenant je ne vois pas ce qu'il y a qui pose problème dans ce que j'ai dit.. Mais bon passons

  9. #9
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    Tu ne peux pas avoir de clé étrangère dans le sens T1 -> T2, dans ce cas tu devrais avoir une condition d'unicité sur les n° de tél dans T2, ce qui n'est pas le cas.

    Et mnitu ne t'a aucunement conseillé cette solution, qui n'est pas possible, tu lui attribues donc une solution qui ne peut fonctionner. Tu comprends pourquoi il n'apprécie guère ?

Discussions similaires

  1. Clé étrangère sur deux clés primaires?
    Par flozz dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/06/2011, 15h41
  2. Définition des clés primaires et étrangères
    Par Yukiho dans le forum Débuter
    Réponses: 6
    Dernier message: 01/03/2010, 16h18
  3. Des tables sans clés étrangères ni clés primaires
    Par tomyy dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 04/09/2009, 02h50
  4. Réponses: 4
    Dernier message: 03/02/2009, 11h50
  5. Problème avec clés primaires et étrangères
    Par mat777 dans le forum JDBC
    Réponses: 0
    Dernier message: 23/01/2009, 15h32

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