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

g_barthe 27 Messages postés mardi 11 mai 2004Date d'inscription 13 mars 2008 Dernière intervention - 20 févr. 2008 à 22:26 - Dernière réponse : g_barthe 27 Messages postés mardi 11 mai 2004Date d'inscription 13 mars 2008 Dernière intervention
- 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
Evangun 1982 Messages postés dimanche 20 février 2005Date d'inscription 24 septembre 2012 Dernière intervention - 21 févr. 2008 à 22:46
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.

à+

Merci Evangun 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 119 internautes ce mois-ci

Commenter la réponse de Evangun
Evangun 1982 Messages postés dimanche 20 février 2005Date d'inscription 24 septembre 2012 Dernière intervention - 20 févr. 2008 à 23:54
0
Merci
Hello,

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