Intégrité référentielle

Résolu
g_barthe Messages postés 27 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 13 mars 2008 - 20 févr. 2008 à 22:26
g_barthe Messages postés 27 Date d'inscription mardi 11 mai 2004 Statut Membre 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

6 réponses

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
21 févr. 2008 à 22:46
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.

à+
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
20 févr. 2008 à 23:54
Hello,

quel est ton problème exactement ?
à+
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
21 févr. 2008 à 00:01
Je veux dire la structure de tes tables, ce que tu cherches à faire exactement :p
0
g_barthe Messages postés 27 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 13 mars 2008
21 févr. 2008 à 14:14
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
g_barthe Messages postés 27 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 13 mars 2008
21 févr. 2008 à 19:41
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
0
g_barthe Messages postés 27 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 13 mars 2008
22 févr. 2008 à 12:47
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
0
Rejoignez-nous