Sarc Posté 7 Mars 2007 Posté 7 Mars 2007 Salut à tous Je n'ai pas trouvé de bonnes documentations traitant des clefs étrangères, de la façon de les utiliser, de la façon d'organiser sa base en s'aidant de ces clefs étrangères, et d'exemples... Ca existe quelque part ? J'aurais une question plus précise là-dessus : est-il possible de supprimer la totalité des lignes relatives à une clef principale, sauf la ligne de cette clef principale ? Par exemple, j'aimerais supprimer tout ce qui concerne le membre X, mais sans supprimer la ligne de la table "membres"... A défaut, je garderai les infos, supprimerai tout et recréerai une ligne, mais ce n'est pas ce qui me plaîrait le plus. Merci d'avance
TheRec Posté 7 Mars 2007 Posté 7 Mars 2007 Bonsoir, En cherchant on trouve beaucoup de cours sur les SGBDR Certains de ces cours traitent des questions que tu poses... et surtout reviennent aux fondamentaux de la modélisation ("organiser" n'est pas vraiment le terme utilisé lorsque l'on parle de la conception d'une base de données). Les deux plus intéressants et complets, après une lecture succincte, sont ceux-ci selon moi : Conception d'une base de données Base de Données et langage SQL Pour ta question plus précise, ce que je comprends c'est que tu fais appel aux contraintes de clés étrangères dans le cas que tu décris. Le fait est que ces contraintes ne sont appliquées que lorsqu'une requête met à jour (ON UPDATE) ou supprime (ON DELETE) un ou plusieurs enregistrements de la table en question. Bref sans altérer la table source, tu ne déclancheras pas ces actions. Si toutefois tu le fais ainsi, tu devras recréer l'enregistrement de la table à la base de ces contraintes et si tu veux rester cohérent tu devras lui attribuer la même clé primaire qu'avant sa suppression, ce qui n'est pas si évident que cela lorsque ta clé primaire est en "auto-increment" et est "UNIQUE", donc cette solution est à oublier à mon avis. Dans ton cas, j'effacerais les enregistrements des autres tables, une à une (solution la plus portable) ou, depuis MySQL 4.0, avec une requête DELETE multi-tables) en te basant sur la clé primaire et les jointures. C'est du travail et lorsque le schéma évolue par la suite cela implique des modifications dans ton code (si cela à un rapport avec la même clé primaire), mais tu es bien obligé de dire à MySQL ce que tu veux supprimer précisément si tu ne lui dit pas de TOUT supprimer
Sarc Posté 7 Mars 2007 Auteur Posté 7 Mars 2007 TheRec, je vais finir par demander un stage chez toi pour perfectionner mon apprentissage de nos chères bases de données... C'est toujours toi le premier à me répondre sur des questions du genre, encore merci à toi ! A vrai dire pour ma question, je réfléchis surtout à la prochaine structure que je vais adopter pour ma base, parce que j'aimerais simplifier et améliorer certaines choses dedans... Donc rien n'est créé pour l'instant, mais dans l'idée, c'est bien ce que tu évoques ! Il est néfaste de recréer l'enregistrement avec la même clef que précédemment, si celle-ci est normalement en auto-increment ? Il me semble que la base accepte quand même la création, si on lui spécifie un ID qui n'est pas déjà pris par une autre ligne... Enfin, si je ne me trompe pas. Je lirai les cours que tu m'as donnés, j'espère que j'obtiendrai un niveau convenable après telle lecture !
TheRec Posté 7 Mars 2007 Posté 7 Mars 2007 Il est néfaste de recréer l'enregistrement avec la même clef que précédemment, si celle-ci est normalement en auto-increment ? Il me semble que la base accepte quand même la création, si on lui spécifie un ID qui n'est pas déjà pris par une autre ligne... Enfin, si je ne me trompe pas. Ce n'est pas néfaste en soi, mais de tous les cours de base de données auquels j'ai participé et lors de mes lectures, je n'ai jamais appris ce genre de pratiques. Selon moi toucher aux clés primaires de cette façon peut, tôt ou tard, mener à des incohérences (cela dépend du système de base de données, des moyens utilisés pour ajouter des enregistrements, etc.). Effectivement cela fonctionnera, mais je ne me vois pas utiliser cette méthode, peut-être que c'est la vieille école je ne sais pas... Cela fait un moment que je n'ai plus pris part à un cours à ce sujet je l'avoue. Je lirai les cours que tu m'as donnés, j'espère que j'obtiendrai un niveau convenable après telle lecture !Je l'espère, en tous cas ces cours sont complets et de ce que j'ai pu en lire les approches ne sont pas totalement similaires donc tu auras le choix P.S. : Allez, la prochaine fois je ne réponds pas avant que mon message apparaisse en page 2, histoire de d'éviter de jouer celui qui veut imposer "ma" pensée universelle
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant