Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [SQL / PL-SQL / SGBD] » associer deux tables
Login Mot de passe

1 visiteurs sur ce topic (0 membre(s), 1 invité(s) )


Auteur
Sujet : associer deux tables
Aquillon
Vétéran
Membre # 6518

 Avatar du membre
Lieu : Genève

Messages :
3749 (0.64 par jour)


Score :

Message du 12-06-2008 @ 10:51   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Salut,
je veux faire une association du type "un message peut avoir zéro ou plusieurs commentaire" mais je ne sais absolument pas comment m'y prendre :sic:
J'ai réussi à pondre ça après mes recherches mais je ne suis pas certain que cela fasse ce que je souhaite :

Code :


CREATE TABLE `messageboard` (
`id_messageboard` int UNSIGNED NOT NULL AUTO_INCREMENT,
`ip` varchar(15) NOT NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`pseudo` varchar(20) NOT NULL,
`mess` text NOT NULL,
PRIMARY KEY (`id_messageboard`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `comments` (
`id_comments`   int UNSIGNED NOT NULL AUTO_INCREMENT,
`id_messageboard` int UNSIGNED NOT NULL,
`ip` varchar(15) NOT NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`pseudo` varchar(20) NOT NULL,
`message` text NOT NULL,
PRIMARY KEY (`id_comments`),
FOREIGN KEY (`id_messageboard`) REFERENCES `messageboard` (`id_messageboard`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Donc voilà, j'ai bon ou pas ?
- Haut de page -
Flymann TTH
Vétéran
Membre # 11665

 Avatar du membre
Lieu : Dax / Rodez

Messages :
4512 (0.82 par jour)


Score :

Message du 12-06-2008 @ 16:37   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Y a juste un truc que je capte pas : le "ON DELETE NO ACTION ..."
Si tu supprime le message, il va bien falloir que tu ais un trigger ou un truc dans le genre qui vienne te faire du nettoyage au niveau commentaires non ?

----------
Core2Duo E8400 @ 4,25Ghz + 1A-HV3 + Kit 1A, P5Q Pro + 1A nb, 2*2 Go G-skill @473Mhz 4-4-4-12
Sapphire 4870 + EKwaterblocks, Alim Seasonic S12 600W, Antec SuperLan Boy
DD Samsung - 4 x 500 Go RAID 0+5 - RAID 0 : 340Mo/s, 10ms - RAID 5 : 210Mo/s, 15ms
Panasonic CF-T4 - 12" P-m 1.2 ULV - 915GM - 1Go DDR2 - Momentus 5400 160Go ____ 22H d'autonomie avec 2 batteries
Nikon D700 + Nikkor AF-S 24-70mm f/2.8G ED + SB-900
- Haut de page -
Aquillon
Vétéran
Membre # 6518

 Avatar du membre
Lieu : Genève

Messages :
3749 (0.64 par jour)


Score :

Message du 12-06-2008 @ 18:08   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Flymann TTH a écrit


Y a juste un truc que je capte pas : le "ON DELETE NO ACTION ..."
Si tu supprime le message, il va bien falloir que tu ais un trigger ou un truc dans le genre qui vienne te faire du nettoyage au niveau commentaires non ?



Ha oui nan mais ça c'est parce que je ne sais pas quoi mettre à la place :siffle: Mais oui tu as raison, il faut qu'il se passe quelque chose quand un message est supprimé (genre effacer aussi les commentaires :D)

[message édité le 12-06-2008 @ 18:09 Par Aquillon]
- Haut de page -
Flymann TTH
Vétéran
Membre # 11665

 Avatar du membre
Lieu : Dax / Rodez

Messages :
4512 (0.82 par jour)


Score :

Message du 12-06-2008 @ 18:52   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Vu que les dernières BDD sur lesquelles j'ai bossé ont été SQL Server et Oracle, je me suis un peu rouillé en MySQL.
Mais je suppose qu'il doit y avoir l'équivalent de trigger pour déclencher la suppression des commentaires qui sont liés à ce message. Et en général le SGBD est même capable de le faire tout seul (justement grâce au genre de trucs que tu pourrais mette à la place du "NO ACTION")

----------
Core2Duo E8400 @ 4,25Ghz + 1A-HV3 + Kit 1A, P5Q Pro + 1A nb, 2*2 Go G-skill @473Mhz 4-4-4-12
Sapphire 4870 + EKwaterblocks, Alim Seasonic S12 600W, Antec SuperLan Boy
DD Samsung - 4 x 500 Go RAID 0+5 - RAID 0 : 340Mo/s, 10ms - RAID 5 : 210Mo/s, 15ms
Panasonic CF-T4 - 12" P-m 1.2 ULV - 915GM - 1Go DDR2 - Momentus 5400 160Go ____ 22H d'autonomie avec 2 batteries
Nikon D700 + Nikkor AF-S 24-70mm f/2.8G ED + SB-900
- Haut de page -
Aquillon
Vétéran
Membre # 6518

 Avatar du membre
Lieu : Genève

Messages :
3749 (0.64 par jour)


Score :

Message du 12-06-2008 @ 18:55   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

"ON DELETE CASCADE"

Je pense que c'est ça.
Sinon, tu penses que ça va fonctionner si je fais mes tables comme ça ?
- Haut de page -
Finch
Sage
Membre # 5042

 Avatar du membre
Lieu : belgique, Liège

Messages :
1772 (0.3 par jour)




Message du 12-06-2008 @ 19:12   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Je pense que ça a l'air bon.
Un message pourra avoir plusieurs commentaires et un commentaire ne concernera qu'un seul message.

[message édité le 12-06-2008 @ 19:14 Par Finch]
----------
Qui prête à rire n'est jamais sûr d'être remboursé... [R. Devos]
- Haut de page -
Flymann TTH
Vétéran
Membre # 11665

 Avatar du membre
Lieu : Dax / Rodez

Messages :
4512 (0.82 par jour)


Score :

Message du 12-06-2008 @ 21:19   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Aquillon a écrit

"ON DELETE CASCADE"

Je pense que c'est ça.
Sinon, tu penses que ça va fonctionner si je fais mes tables comme ça ?



Ouaip c'est ça :)
(Même syntaxe sous Oracle et SQL Server :D)

----------
Core2Duo E8400 @ 4,25Ghz + 1A-HV3 + Kit 1A, P5Q Pro + 1A nb, 2*2 Go G-skill @473Mhz 4-4-4-12
Sapphire 4870 + EKwaterblocks, Alim Seasonic S12 600W, Antec SuperLan Boy
DD Samsung - 4 x 500 Go RAID 0+5 - RAID 0 : 340Mo/s, 10ms - RAID 5 : 210Mo/s, 15ms
Panasonic CF-T4 - 12" P-m 1.2 ULV - 915GM - 1Go DDR2 - Momentus 5400 160Go ____ 22H d'autonomie avec 2 batteries
Nikon D700 + Nikkor AF-S 24-70mm f/2.8G ED + SB-900
- Haut de page -
stackware
Inutile, mais indispensable :)
Membre # 6403

 Avatar du membre
Lieu : Paris

Messages :
9549 (1.63 par jour)


Score :

Message du 08-08-2008 @ 15:40   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

On peut également faire du ON UPDATE CASCADE ou RESTRICT. C'est le cas où on a la possibilité de mettre à jour la clé primaire d'un message (bouchage de trou par exemple).
Cascade répercute dans la ou les tables filles le changement de clé primaire (pratique) et restrict interdit la mise à jour d'une mère si des filles existent (surtout utilisé pour le delete).
C'est pour assurer ce que l'on appelle l'intégrité référentielle (garantie que l'on aura pas de filles orphelines)
Dans le cas d'un message et de commentaires, supprimer les commentaires quand on vire le message d'origine, c'est bien. Quand il s'agit d'une gamme qui a des produits, ça interdit juste de virer une gamme qui contient encore des produits ==> on prévoit alors des transactions d'affectation des produits à une autre gamme, avant de permettre la suppression de la gamme...
----------
Nul n'est jamais assez fort pour ce calcul

Visitez le Site Officiel du V Paris et des Vx

Fractal R5 Titanium; i7 3770K; Asus P8Z77-V; Corsair DDR3-1600 8Go ; M4 512 Go + Toshiba 4To ; Asus GTX 780 DirectCU II (Spook inside); BenQ EW2730V 27''; Win X Home; Netgear R7000
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.038 secondes