J'essaie de créer une application web de messagerie (Java). Les messages sont stockés en utilisant MySQL à l'aide de trois tables:Suppression de lignes dans des tables MySQL liées et décrémentation du nombre dans une autre table
- 'messages': a deux colonnes, une clé primaire identifiant ('de idmessage') et le message ('message').
- 'Tags': L'utilisateur saisit également une étiquette associée à son message. Cela a deux colonnes - l'étiquette (qui est aussi une clé primaire) et un compte («count»).
- 'message_tag_link': Comme il existe une relation plusieurs-à-un entre les messages et les balises, j'ai une troisième table de liaison. Cela a deux colonnes, à la fois les clés étrangères aux messages ('fk_idmessage') et les balises tables 'ids (' fk_tag ').
L'insertion de messages dans la base de données fonctionne correctement. J'utilise ces lignes suivantes en Java:
pst1 = connection.prepareStatement("INSERT INTO messages(message) VALUES (?)");
pst2 = connection.prepareStatement("INSERT INTO tags(tag,count) VALUES (?,1) ON DUPLICATE KEY UPDATE count = count + 1");
pst3 = connection.prepareStatement("INSERT INTO message_tag_link(fk_idmessage,fk_tag) VALUES (? , ?)");
Comme on le voit par incréments de « count » en PST2 chaque fois est fait une entrée d'étiquette en double. J'essaie de savoir comment supprimer complètement un message. J'ai la description on delete cascade
sur mes clefs étrangères dans les colonnes de ma table de lien mais je ne suis pas sûr que faire ensuite. Pour une donnée « messageid » je dois:
- Supprimer une ligne dans la table 'messages de
- Supprimer la ligne associée à la table « message_tag_link »
- Décrémenter la valeur de comptage dans les « tags 'table quand une suppression de message est réussie, ou supprimez cette ligne entièrement si count devient zéro.
Est-il possible de faire tout cela dans MySQL en utilisant un Java PreparedStatement
? Des pointeurs très appréciés. Je suis un novice MySQL total, alors s'il vous plaît soyez gentil!
Y at-il une raison pour laquelle le compte est stocké? Vous pouvez simplement utiliser le nombre de messages joints. – Jim
... et peut-être utiliser un 'VIEW' pour calculer le nombre de balises. – feeela
@Jim Oui. Je peux voir une solution sans la colonne de compte pourrait fonctionner. Ce que je ne comprends pas est sans cette colonne, quand vous supprimez des lignes de 'messages' et la table de liens vous êtes potentiellement laissé avec une ligne dans la colonne des étiquettes qui ne correspond plus à un message (c.-à-d. Une étiquette).C'est pourquoi j'ai pensé que la colonne de compte serait une manière bonne et rapide d'adresser ceci - mais aucune idée comment l'employer, d'où ma question! – Jon