|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2011 Messages : 61 ![]() |
Bonjour,
Mon problème ne porte pas vraiment sur le langage SQL mais la logique des bases de données. Voilà j'ai deux tables : Message (où je stocke les infos de l'email) et Attachement où je stocke les infos sur les pièces jointes de l'email). J'ai deux possibilités : Code :
Code :
Où pourrais-je utiliser une autre clé primaire pour la table attachement ?? |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 087 ![]() |
Bonjour,
Avec ta deuxième méthode, comment fais-tu pour avoir 2 pièces jointes dans un mail ? Tatayo. |
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Pourquoi le fait d'avoir une clé primaire qui ne sert jamais te pose des soucis ?
Clairement la première solution est plus pertinente (dans la réalité on a souvent plusieurs fichiers attachés, non ?) |
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2011 Messages : 61 ![]() |
Justement tatayo, c'est pour cette raison que je suis perdue, dans le deuxième exemple, je ne pourrais avoir qu'une seule pièce jointe par message !!
|
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2011 Messages : 61 ![]() |
Et ben si j'utilise le premier exemple, à chaque fois que je veux utiliser la même pièce jointe, elle va être ajoutée avec une nouvelle clé, alors que si tu essayes avec ta boite email, d'envoyer un message, avec 2 fois la même pièce, ça ne marche pas !!
|
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2011 Messages : 61 ![]() |
Je crois que j'ai trouvé
Si la clé primaire de la table Attachement est a la fois codeMessage et Chemin, ca va permettre d'avoir plusieurs pièces jointes par message, et aussi de ne pas choisir la même pièce jointe pour le même message!! voilà (parfois quand tu essaye d'expliquer le problème tu le comprend mieux !!) |
|
|
00
|
|
|
#7 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2011 Messages : 61 ![]() |
Voici le nouveaux code
Code :
|
||
|
|
00
|
|
|
#8 |
![]() ![]() |
Oh oui !
Un VARCHAR(200) comme clé primaire, c'est contre performant ! Si je comprends bien ta structure, tu as voulu implémenter l'association suivante : message -0,n----joindre----1,n- attachement Met un identifiant auto-incrémenté à ton attachement et utilise le dans la clé primaire de la table associative : message (msg_id, msg_objet...) attachement (att_id, att_chemin) att_message (am_id_message, am_id_attachement) Au passage, pourquoi séparer la date et l'heure du message au lieu d'utiliser le type DATETIME ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
20
|
|
|
#9 | |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2011 Messages : 61 ![]() |
CinePhil je vous remercie infiniment pour vos précieuses remarques
Citation:
et si je mets "text" pour le chemin au lieu de varchar(200)..? |
|
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2011 Messages : 61 ![]() |
Est-ce que je pourrais par exemple ajouter l'id qui s'incrémente, mais pas dans la base, j’incrémenterai à partir de l'application à chaque fois que l'utilisateur choisit un nouveau chemin...??!!
|
|
|
00
|
|
|
#11 | ||||||
![]() ![]() |
Citation:
Scénario : 1) J'envoie un message avec la pièce jointe stockée en /home/philippe/documents/mapomme.jpg. 2) Le programme interroge la BDD pour savoir si la pièce jointe est déjà référencée. Code :
Code :
5) J'associe les deux et l'enregistre dans la table associative att_message. Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||||
|
00
|
|
|
#12 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2011 Messages : 61 ![]() |
Je vous remercie
J’attendrais d'autres remarques..!! |
|
|
00
|
|
|
#13 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
A quoi sert d'avoir la table attachement avec sa colonne chemin alors que le chemin est déjà dans la table Att_Message?
Pour interdire d'avoir plusieurs fois le même chemin dans un message, un index unique sur le couple (codemessage,chemin) est suffisant, et au passage, il n'est pas nécessaire que cet index unique soit la clef primaire. Il peut très bien y avoir en plus une clef primaire en ID auto-incrémenté, s'il se trouve que cet ID a une utilité. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com