Problème tables reliées phpmyadmin

WRInaute discret
Bonjour à tous,

Je viens de me mettre sur phpmyadmin.

J'ai crée 3 tables:
- categories
- produits
- produits_categories

Je dois relier les tables mais j'ai un message d'erreur:

Erreur
Certaines fonctionnalités ayant trait aux tables reliées sont désactivées. Pour une analyse du problème, cliquez ici.

puis:
PMA Database ... en erreur[ Documentation ]
Fonctions relationnelles désactivé

Comment dois-je faire ?

Merci d'avance.

PP51
 
WRInaute accro
>> Je dois relier les tables
pour faire quoi ? c'est en php que tu fais tes requetes sur plusieurs tables
 
WRInaute discret
Bah, si tu peux assurer toi-même l'intégrité référentielle de la base, par tes scripts (genre, quand tu supprimes un produit, tu supprime les lignes qui vont bien de produits_categories), ça ne sert à rien de créer des clés externes.

C'est comme ça que j'ai l'habitude de faire depuis le temps que j'utilise mysql (car dans les anciennes versions, il n'acceptait pas du tout les contraintes FOREIGN KEY)

Il te suffit par contre de placer des index (en particulier dans les deux champs de produits_categories qui pointent "virtuellement" vers les clés primaires des autres tables) pour accélérer les jointures.
 
WRInaute discret
en fait j'ai acheté un bouquin pour monter mon site d'ecommerce de A à Z...

Comme je n'y connais strictement rien en php, je suis les instructions à la lettre :roll:

Ma table bt_prd_categories devrait me permettre de classer mes produits sur certaines catégories que j'ai crée.
Dans mon cas, un même produit doit pouvoir être relié à plusieures catégories...

En fait le message d'erreur est apparu dès la création de ma seconde table.
1ere table: - categories
2è table: - produits

C'est à ce moment que j'ai eu l'avertissement / alors que je n'avais jamais voulu faire de table reliée...

Y a t'il un paramétrage particulier à faire ?

Merci en tout cas pour vos réponses :wink:
 
WRInaute discret
e-kiwi a dit:
et opter pour une solution genre Oscommerce ca te branches pas ? ca ira plus vite je penses :)

Ca ira sans doute plus vite, mais j'essaye de faire par moi-même :wink:

J'ai déjà pris 4 mois pour apprendre le xhtml et le css

Maintenant pour avoir un résultat plus pro, j'ai besoin d'avoir un site dynamique entièrement personnalisé, fonctionnant avec des bases de données.

Ca ne me parait pas excessivement compliqué, le bouquin est plutôt bien fait, je procède étape par étape, création des bases, habillage graphique, création de classe_boutique, etc.

Mais bien entendu, à peine commencé, déjà une question...

Je me dis que ce problème de tables reliées peut provenir de mon fichier config.inc.php, mais je n'ai aucune certitude :roll:
 
WRInaute accro
moi je n'ai toujours pas compris ce que tu cherchai à faire en fait. une fois tes tables créées, laisse les telles qu'elles sont, tu fera le reste en php (requetes multi-tables)
 
WRInaute discret
e-kiwi a dit:
moi je n'ai toujours pas compris ce que tu cherchai à faire en fait. une fois tes tables créées, laisse les telles qu'elles sont, tu fera le reste en php (requetes multi-tables)

C'est effectivement ce que je vais faire.

C'est juste cet avertissement "Certaines fonctionnalités ayant trait aux tables reliées sont désactivées" que j'essaye de comprendre.

J'ai vu sur d'autres forums que je ne suis pas le seul, visiblement dans config.inc.php dans le rep de phpmyadmin, il faut configurer la ligne PMA en debut de fichier

Je vais voir ça de ce pas
 
Nouveau WRInaute
Les liens de table, inutiles ???

Oulaaa que vois-je ?
Les liens au sein même d'une base de donnée, inutiles ?
Mouarf ! Je pensais comme vous aussi avant ;)

Et puis j'ai essayé d'autres bases de données que mysql (cadre professionnel) => mssql, oracle, etc.

L'arrivée des liens de tables (appelées aussi contraintes relationnelles) sur mysql est qqch de TRES TRES bien, et en profiter, qqch d'encore mieux ;)

J'explique, et peut-être que certains d'entre vous seront tentés de faire l'essai (Je le conseille même fortement si vous vous lancez dans des projets sérieux de grande envergure...)

1. Une contrainte relationnelle, qu'est-ce que c'est ?
Il s'agit de déclarer un lien entre deux tables, qui devient alors explicite au sein de mysql, et non plus uniquement implicite dans votre tête ou sur une feuille de papier.
Dans le cas d'une base de données avec 2 tables, ok, c'est un peu inutile, mais ca fait toujours propre.
Dans le cas d'une base avec beaucoup de tables, la, ca devient interressant car croyez moi, ca evite des erreurs par la suite.

2. A quoi ca peut servir ?
Trois interets majeurs:

- Permet d'élaborer à coup sur une base avec des ID de tables cohérents entre eux.
Sans contrainte (lien), il est si facile en mysql de définir un id sur une table en smallint, et son id equivalent sur une autre table en mediumint par exemple... Ca ne pose aucun soucis à l'execution... Jusqu'au moment ou BAM un des champs 'explose' et il y a des problemes d'intégrité dans votre base de données...

- Le deuxième, évident, est la contrainte du lien elle-même: si vous déclarez un lien entre deux tables, et que dans votre code (php ou autre) vous faites une requete SQL en reliant deux tables par le mauvais lien 'implicite' (2 ID qui n'auraient rien à voir entre eux), une erreur sera systématiquement retournée, et non pas un mauvais résultat comme ca pourrait arriver autrement.
Encore une fois, si votre base comporte un grand nombre de tables / champs, vous éviterez ainsi les erreurs et le temps de debug à repérer le soucis (d'autant que si vous n'avez pas pris grand soin de bien nommer vos champs (et dieu sait que ca arrive...) la confusion peut vite arriver.

- La troisième, pour moi la plus importante sans doute (car elle simplifiera vos codes de manière très significative ainsi que leur temp d'éxécution du même coup) est les fonctions apportées par ces liens.
Un exemple:
Je déclare deux tables, avec un lien entre elles. Je spécifie au niveau du lien un petit ON DELETE CASCADE, et la, la magie opère. Si vous supprimez dans votre code une donnée d'une des tables, que cette donnée était liée à une autre donnée de la deuxieme table, plus besoin de 'nettoyage' manuel en php, la suppression de la deuxieme donnée, plus liée à rien, se supprimera automatiquement (et bien plus rapidement qu'avec un code php...). D'autres options sont disponibles bien sur, comme la possibilité de remettre un ID à null en cas de suppression de la donnée sur laquelle il porte, etc.

*************************

Alors... oui, c'est peut être un concepte un peu délicat à maitriser, qui nécessite en plus un minimum de logique, mais... dire que c'est inutile et qu'on peut le gérer autrement, ben... c'est dommage ;)
En développement, il y a toujours des moyens de procéder autrement, mais utiliser les objets qui existent et qui sont fait pour ca simplifie beaucoup la vie et rend les codes beaucoup plus clairs, propres, et efficaces.

A vous de voir ;)
 
Discussions similaires
Haut