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

Signaler
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008
-
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008
-
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

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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.

à+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Hello,

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

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.
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008

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
Messages postés
27
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
13 mars 2008

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