Clé primére

toto -  
 Joker first -
g une table ouvrage (cot_ouv,tit_ouv,...) et une table mot_ouv(cot_ouv,mot)
tel que la 2éme table me permet de faire une indexation manuelle sur les ouvrages.
mon pb c'est que meme si je met le couple (cot_ouv,mot_ouv) comme cle primére pour la 2éme table,
en inserant mes enregistrement on me donne pas le droit d'inserer le meme mot pour deux ouvrages differents.
alors que normalement pour une indexation de documents, deux documents differents peuvent faire reference
au meme sujet donc avoir les memes mot_clé.
si vous voyez l'anomalie veillez me guide et merci d'avance.
(au cas ou ça vous aide je travail avec Oracle et pl/sql).
A voir également:

7 réponses

blux Messages postés 4928 Date d'inscription   Statut Modérateur Dernière intervention   3 367
 
Salut,

ce que tu souhaites faire s'appelle une relation de 'n à n', c'est à dire que plusieurs ouvrages peuvent contenir le même mot, et plusieurs mots peuvent être dans le même ouvrage.

La relation 'n à n' n'existe pas dans le monde relationnel, elle se simplifie avec une relation 1 à n et n à 1, en créant une table supplémentaire qui a comme clé primaire l'ensemble des clés primaires de chaque table visée. On appelle cela une 'clé étrangère' (foreign key, dans la langue de chat-qu'espère :))

Exemple :

Clés de la table Ouvrages :

Code_Ouv;....

Clés de la table Mots :

Code_Mot;....

Clés de la table Liens :

Code_Ouv;Code_Mot;...

Dans cette dernière table, les colonnes peuvent avoir la même valeur de manière individuelle, mais pas ensemble :

On peut trouver :

Titre1;Mot1
Titre1;Mot2
Titre2;Mot2

Mais pas de nouveau le couple Titre1;Mot1.

S'il arrive que l'on ait plusieurs références au même mot-clé pour le même bouquin, alors il faut une autre colonne dans ta clé primaire pour identifier précisément l'occurence du mot recherché (ce peut être le numéro de page dans l'ouvrage).

C'est assez clair ?

N'hésite pas à reposer des questions, il y aura sûrement d'autres lecteurs que moi, et révise sérieusement les notions de clés étrangères... ;-)

A+ Blux            "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
0
toto
 
c ce que g fait:
table1:ouvrage(qui a comme cle primere cot_ouv et a bien evidement d'autre atts propre à elle).
table2:mot (qui a comme cle primere mot).
table3:mot_ouv et qui represente la relation entre les tables ouvrage et mot et qui a comme cle primere le couple(cot_ouv_mot)
mais le probleme c quand j'essaye d'inserer unmot pour un ouvrage x alors que j'ai deja inseré le meme mot pour un ouvrage y g un message d'erreur qui me dit element deja inseré.
voila mon pb,et merci.
0
blux Messages postés 4928 Date d'inscription   Statut Modérateur Dernière intervention   3 367
 
si tu as vraiment défini 2 colonnes comme clé primaire de ta table3 (cot_ouv;mot) et que tu veux insérer un autre mot dans ta table3, alors je ne vois pas le problème !

tu devrais avoir ce problème d'insertion de mot dans la table2, qui elle, interdit deux clés de même valeur.

Peux-tu me donner la syntaxe de la définition de ta table3 en ce qui concerne les clés ?

A+ Blux            "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
0
toto
 
ça y est g reussi je ne sais g essaye de le faire en creyant 3 nouvelles tables identiques aux premiére et ça a marche .
mais on m'affiche le meme ouvrage plusieurs fois c a dire que si le mot que je cherche appartient à l'ouvrage1 et a 3 synonymes (que j' extrait de la table synonyme, une 4ème table de ma bd)alors je retrouve ds l'affichage 3 fois cette ouvrage alors que moi je veux avoir tout les livre concerné par le mot cle que je fait entrer , c a dire que des que mon mot appartient a l'ouvrage x ce dernier doitapparaitre une seule fois quelque soit le nbre de ses synonymes .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blux Messages postés 4928 Date d'inscription   Statut Modérateur Dernière intervention   3 367
 
t'as essayé dans ta requête "SELECT UNIQUE Nom_Ouvrage, ..." qui ne renvoie qu'une seule occurence du résultat même s'il y en a plusieurs ?

A+ Blux            "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
0
spyagent01 Messages postés 86 Statut Membre 13
 
Bonsoir,

Pas le temps d'entrer dans le détail mais une clé primaire ne peut jamais être dupliquée. Ton problème ne peut donc venir que d'une mauvaise déclaration de la clé primaire de la table_3.

Enfin pour une recherche par thème, j'aurais crée une relation mot-ouvrage et non pas l'inverse ceci pour des questions de rapidité d'exécution. Donc il y 2 relations 1 à N (ouv-mot et mot-ouv).

Si la base est importante (nb de records) il est préférable de ne pas tenter de construire dynamiquement une extraction avec une requête SQL mais de bien déclarer les 2 relations dans la structure de la base. A fortiori si le nombre de transactions est élevé.

C’est là que l’on s’aperçoit de l’utilité des tests sur un veau et surtout pas sur une bombe.

__________
SpyAgent01
0
Joker first
 
tu a bien fait la requete suivante select [nom des champs que tu veut voir apparaitre(il n'est pas neccessaire de mettre les 2 identifiant commun) from [le nom de tes table] where [Identifiant de la premiere table commun au 2 table] =[Identifiant de la seconde table commun au 2 table]; essai cette requete ca devrai marcher
0