g_barthe
Messages postés27Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention13 mars 2008
-
20 févr. 2008 à 22:26
g_barthe
Messages postés27Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention13 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.
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é.
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?