Intégrité référentielle [Résolu]

Messages postés
27
Date d'inscription
mardi 11 mai 2004
Dernière intervention
13 mars 2008
- - Dernière réponse : g_barthe
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Dernière intervention
13 mars 2008
- 22 févr. 2008 à 12:47
Bonsoir,

Je cherche à savoir comment vous gérer vos problèmes d'intégrité référentielle avec mysql et php.

J'ai créé une clé primaire sur mes différentes tables mais après je pense que faire des recherches sur les ID utilisées par chaque table n'est pas top et un peu lourd. Car rechercher si chaque valeur doit être vérifié qd on en a 3-4 faire autant de SELECT traiter l'erreur si aucun enregistrement et autoriser la suppression par exemple ca devient vite super lourd. Je nage...

Je n'ai pas trouvé bcp d'infos la dessus. Les Foreign key sont citées mais je vois pas trop comment utiliser cela.

Pourriez-vous m'aider un peu ou me donner un lien si possible en français qui m'aiguillerais un peu.

Merci d'avance.

----------------------------------------------------------------------------
Forum perso : http://le-genie-climatique.positifforum.com

Forum travaux manuels : http://pausebroderie.fr
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
1982
Date d'inscription
dimanche 20 février 2005
Dernière intervention
24 septembre 2012
3
3
Merci
Bonsoir,

il n'y a pas de difficulté à passer de MyIsam à InnoDB, ne tinquiète pas. Tu peux te renseigner sur les différences de perfs, en fait chacune a sa spécialité.

un lien pour introduire : http://www.journaldunet.com/developpeur/tutoriel/out/040511-sql-types-stockage-myisam-innodb.shtml

MyIsam ne permet pas les clés étrangères, et InnoDB si.

Ceci dit, sous MyIsam tu dois pouvoir faire une seule requête pour faire ce que tu veux, mais elle comprendra des sous-requêtes. Je t'invite à te renseigner là-dessus.

à+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Evangun
Messages postés
1982
Date d'inscription
dimanche 20 février 2005
Dernière intervention
24 septembre 2012
3
0
Merci
Hello,

quel est ton problème exactement ?
à+
Commenter la réponse de Evangun
Messages postés
1982
Date d'inscription
dimanche 20 février 2005
Dernière intervention
24 septembre 2012
3
0
Merci
Je veux dire la structure de tes tables, ce que tu cherches à faire exactement :p
Commenter la réponse de Evangun
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Dernière intervention
13 mars 2008
0
Merci
Salut,

Voila la structure de 2 tables qui sont liées par l'id_possesseur mais sous phpmyadmin je n'ai rien qui est lié

CREATE TABLE `gc_cd` (
  `id_cd` int(10) unsigned NOT NULL auto_increment,
  `titre_cd` varchar(100) collate latin1_general_ci NOT NULL,
  `id_groupe_art` int(10) NOT NULL,
  `id_style_musique` int(10) NOT NULL,
  `id_possesseur` int(10) NOT NULL,
  PRIMARY KEY  (`id_cd`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=313 ;

CREATE TABLE `gc_possesseur` (
  `id_possesseurs` int(10) unsigned NOT NULL auto_increment,
  `nom_possesseur` varchar(255) collate latin1_general_ci default NULL,
  PRIMARY KEY  (`id_possesseurs`),
  UNIQUE KEY `nom_possesseur` (`nom_possesseur`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=8 ;

La vérification de l'intégrité référentielle est faite comme cela (c'est basique et long je trouve, le code est pas relatif à mes tables citées mais c'est pour l'exemple) :

     // Fonction pour verifier qu'aucun CD n'a ce possesseur (intégrité referentielle)
     $db_table = CD_TABLE;
    $find = 'id_cd';     $liste_serie_bd $base_de_donnees->select($find, $params array('where' =>  "id_possesseurs = '"  . $id_possesseur_a_supprimer . "'"), $db_table);
     $row = mysql_fetch_array($liste_cd);
     $selection_utilisee = $row[0];
     if ($selection_utilisee > '0')
     {.......

En gros je verifier si un CD de ma table a le possesseur que je veux supprimer de la table possesseur. Apres je compte le nb d'élément de la requete et si c'est supérieur à 1 j'exécute la suppression sinon message d'erreur. Mais c'est pas un peu simpliste et lourdingue mon truc ?

Merci à vous.
Commenter la réponse de g_barthe
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Dernière intervention
13 mars 2008
0
Merci
Je lis toujours des infos et je m'apperçois que souvent on parle du moteur de base de données InnoDB au lieu de MyIsam.

Euh faut que je revois ma conception de bdd ?  Ca m'inquiete.

----------------------------------------------------------------------------
Forum perso : http://le-genie-climatique.positifforum.com

Forum travaux manuels : http://pausebroderie.ton-hebergement-gratuit.com
Commenter la réponse de g_barthe
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Dernière intervention
13 mars 2008
0
Merci
je jette un oeil sur les sous requetes.

Merci du coup de main.

---------------------------------------------------------
Forum perso : http://le-genie-climatique.positifforum.com
Forum travaux manuels : http://pausebroderie.fr
Commenter la réponse de g_barthe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.