|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : avril 2008 Messages : 14 ![]() |
Bonjour,
Étant analyste développeur, je suis un peu honteux de poser cette question mais je me tourne vers vous, public avertit ayant l'habitude de sortir de pauvres développeurs comme moi d'un problème de conceptualisation. Alors voici mon problème. Dans le cadre d'un projet je dois mettre en place une base de données et mon problème se pose pour établir le script SQL me permettant de générer celle-ci. Jusqu'ici tout va bien mais je pèche un peu lorsque j'ai à établir une relation réflexive sur l'une de mes tables. Détail de la problématique : un dossier doit suivre différents traitements et passer par différents états, je veux énoncer ces états dans une table en ayant une relation qui me permette de connaitre le ou les états suivants. Donc relation réflexive. Sachant qu'un état peut être suivit de 0, un ou plusieurs états. C'est donc une relation ayant pour cardinalité (0,N). Utilisant DBDesigner le code généré établit deux tables, ce qui est tout à fait logique. Hors dans ma table relation je n'ai qu'un champs (Etat_idEtat) et deux clefs secondaires, hors ces deux clefs secondaires n'apparaissent pas dans ma table dans php my admin (cf copie écran). Voici le script généré : Code :
Merci sincèrement de votre aide, je suis votre obligé. |
||
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 14 ![]() |
Suite à quelques investigations de ma part, je pense que le problème vient du fait que le moteurs de base de données MyIsam ne gère pas les clefs étrangères. Donc deux solutions s'offrent à moi :
-Soit changer le moteur en InnoDB. -Soit gérer l'intégrité de ma table du côté application. L'utilisation de InnoDB est dîtes plus lente par rapport à MyIsam, en sachant que ma base va gérer un très grand nombre d'informations. Etes vous d'accord avec mon analyse? Et existerait-il une autre solution que je n'ai pas énoncée? |
|
|
00
|
|
|
#3 |
![]() ![]() |
Ce que je ne comprends pas, c'est pourquoi tu as une seule colonne et deux clés étrangères dans la table Etat_has_Etat.
Une colonne n'est pas suffisante pour définir l'association entre un état et un état suivant ; il en faut deux. Et les deux clés étrangères sont redondantes. Si tu pars de ce MCD : Etat -0,n--(successeur)--Succéder |-------0,n--(prédécesseur)-----| Tu auras effectivement deux tables mais la table associative engendrée par l'association Succéder aura pour clé primaire le couple constitué de l'identifiant du prédécesseur et de l'identifiant du successeur. Etat (idEtat, nomEtat, dateDebut, delai) Succeder (id_predecesseur, id_successeur) <= correspond à ta table Etat_has_Etat Sinon effectivement, MyISAM ignore superbement les clés étrangères et il faut passer à InnoDB pour en bénéficier, ce qui est bien mieux que de vouloir gérer les contraintes d'intégrité dans l'application. Quant à la soi-disant lenteur de InnoDB par rapport à MyISAM, tu peux stocker des millions de lignes dans la table associative avant de t'en apercevoir !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
|
|
#4 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 14 ![]() |
Je me sens mal de ne pas avoir pensé à cela, qui parait couler de source en effet. Donc deux tables comme tu les as annoncées...
Par contre il y a un élément que je ne saisis pas dans ta réponse "pourquoi tu as une seule colonne"; qu'entends tu par colonne? J'ai peur de ne pas saisir un aspect de ta réponse. Mis à part cela j'ai très bien saisi la conception à mettre en place avec d'un côté une table Etat et une table Relation_etat avec deux attributs, successeur succédé. |
|
|
00
|
|
|
#5 |
![]() ![]() |
Une table SQL est composée de colonnes et de lignes (pas de champs !) et la description de ta table ne comportait que la colonne Etat_idEtat.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 14 ![]() |
D'après ce que j'ai appris durant mes études une table est structurée en entrées et champs (lignes colonnes). Mais je ne met pas en doute tes connaissances tu as surement tes arguments pour appuyer ton affirmation.
(Malgré mon jeune age il est important de garder un esprit critique!). En tous cas je te remercie pour cet éclaircissement ; je travaille seul sur un très gros projet et par moments, à force de faire chauffer la matière grise, on finit par se noyer dans un verre d'eau. Et évidemment je ne fais pas exception à la règle. Merci encore. |
|
|
00
|
|
|
#7 |
![]() ![]() |
C'est une erreur courante même chez les professionnels.
Comme une table - effectivement composée de lignes et de colonnes - est en général affichée à travers une application, sa représentation visuelle est constituée de champs et d'enregistrements. Donc en applicatif : tableau / champs / enregistrements En base de données : tables / colonnes / lignes
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#8 | ||
![]() ![]() |
Citation:
![]() Quelle est l'instruction SQL pour ajouter une colonne à une table ? Dans la base de métadonnées information_schema, que trouve t-on ? Une vue appelée COLUMNS contenant une colonne appelée COLUMN_NAME. Aucun FIELD dans tout ça, CQFD ! Citation:
Si tu connais Zend Framework et plus particulièrement actuellement les ZendX_JQuery_Autocomplete, j'ai grand besoin d'aide !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 14 ![]() |
Ok je prends note pour cette leçon de vocabulaire informatique. L'informatique est une science que je qualifierais d'exacte, malgré le bagage des Docteurs en informatique qui m'ont enseigné la SGBD je remarque que les défauts de vocabulaire sont courants. Malgré tout je m'efforce "d'appeler un chat un chat", et cet enseignement est toujours bon a prendre. Pour ce qui est de Zend je n'utilise pas, ou pas encore malheureusement pour toi. Je préfère apprendre en comprenant tous les tenants et les aboutissants du code que je "pisse". Une fois maîtrisé cela, je pense me tourner vers les frameworks, mais cela n'engage que ma philosophie du génie logiciel. Sur ce, encore merci et désolé de ne pouvoir t'éclairer. Ton aide va me pousser à participer au forum en tant que "résolveur" et moins en tant que "questionneur".
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com