salut tout le monde cvp je veut savoir comment présenter le modèle conceptuel suivant avec un fichier xml et le dtd
http://cheggour2004.ifrance.com/S.JPG
Version imprimable
salut tout le monde cvp je veut savoir comment présenter le modèle conceptuel suivant avec un fichier xml et le dtd
http://cheggour2004.ifrance.com/S.JPG
En XML, on pourrait avoir une arborescence de ce genre :
Code de (Victor BRITO)
<?xml version="1.0" charset="utf-8"?>
<vehicules>
<vehicule>
<immatriculation></immatriculation>
<marque></marque>
<type></type>
<proprietaire>
<prenom></prenom>
<nom></nom>
</proprietaire>
<reparation>
<numo></numo>
<entree></entree>
<sortie></sortie>
<mecanicien>
<numeca></numeca>
<prenom></prenom>
<nom></nom>
</mecanicien>
</reparation>
</vehicule>
<!-- Un autre nœud vehicule -->
<vehicule></vehicule>
</vehicules>
mais pour cette exemple est ce que cette réponse est correcte
La modélisation XML est délicate : passer d'un modèle relationnel à un modèle arborescent revient à fixer des accès plus fréquents que d'autres.
Le problème peut être pris selon différentes approches :
* la plus simple consiste faire un simple rateau de chaque entité et d'utiliser les attributs id pour mémoriser les clés étrangères
* une entité peut être prise pour racine puis les autres entités sont déclinées de proche en proche
* un combiné des deux approches permet d'avoir une combinatoire importante
Pour le cas des voitures et des réparations, il n'est pas malin de partir des voitures car on répète les propriétaires à chacun de leur voiture : les redondances sont toujours dangereuses en mise à jour. Il y a aussi les mécaniciens qu'on imagine bien devoir être gérés indépendamment des voitures et des propriétaires : une clé étrangère sur eux s'impose au niveau de la réparation mais ils doivent être mémorisés au niveau de la racine.
Le problème demeure de savoir quelles requêtes seront effectivement demandées pour savoir si tout cela sera efficace ou non...
ok voici 4 requête que je cherche à réaliser
-Rechercher les mécaniciens ayant travaillé sur la réparation 123
-Rechercher le nombre total d'heures de travail de chaque réparation
-Rechercher les marques des véhicules sur lesquels a travaillé Terieur Alain
-Rechercher le mécanicien ayant effectué le plus d'heures de travail du 10/07/2007 au 12/07/2007, bornes comprises
je prend comme exemple la liste suivante :
http://cheggour2004.ifrance.com/t.JPG
Comme les requêtes sont orientées mécaniciens, je pense qu'il vaut mieux faire deux sous-arborescences : les mécaniciens et leurs réparations; les propriétaires et leurs voitures
Oui il faut mieux commencer par séparer par mécaniciens pour remonter jusqu'au propriétaire
Le plus simple, IMHO, serait de mettre l'énoncé sous une forme normale 2NF ou 3NF d'abord puis de transformer chaque tableau en collection d'éléments XML de même type et d'utiliser des "id" en tant que clé pour créer des liens entre les éléments.
Je suis d'accord pour dire que c'est plus évolutif de recréer pour chaque entité une arborescence en rateau puis de mettre toutes les clés étrangères sous forme d'attributs id.
Mais je trouve dommage de perdre ainsi l'intérêt de l'arborescence en elle-même et les performances de parcours ne seront pas très bonnes s'il commence à y avoir beaucoup d'éléments. Voilà pourquoi je laisserais les réparations sous les mécaniciens et les véhicules sous les propriétaires
est si je commence par réparation ?
est ce que c'est correcte
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE vehicules SYSTEM "vehicules.dtd"> <reparations> <reparation> <numo>123</numo> <vehicule> <marque>Peugeot</marque> <type>406</type> <immatriculation>1234 CX 80</immatriculation> </vehicule> <proprietaire> <nom>Dupont</nom> <prenom>Georges</prenom> </proprietaire> <mecanicien> <numeca></numeca> <prenom></prenom> <nom></nom> </mecanicien> <date_entree></date_entree> <date_date_sortie></date_date_sortie> </reparation> <!-- Un autre nud vehicule --> <reparation></reparation> <reparations>
Il n' y a pas de bon "début"... car il y aura vraiment trop de redondances.
Je proposerais quelque chose commeCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <garage> <mecaniciens> <mecanicien> <nom>...</nom> ... <reparations> <reparation vehicule="idveh123" .../> </reparations> <mecanicien> </mecaniciens> <proprietaires> <proprietaire> <nom>...</nom> ... <vehicules> <vehicule id="idveh123" ...> ... </vehicule> <vehicule id="idveh456" ...> ... </vehicule> </vehicules> </proprietaire> ... </proprietaires> </garage>
concernant l'utilisation d'id ou d'une arborescence (avec forcement beaucoup de répétition) la question est qui génère le fichier xml?
Si tu a un applicatif qui à partir d'une base de donnée génère le fichier xml, et que tu n'as pas de soucis avec la taille du fichier il faut mieux utiliser la notion d'arborescence car tu n'as pas de risque que les données véhicule par exemple change pour un même véhicule.
SI le créateur du fichier c'est toi alors il faut mieux utiliser les id ce qui évite a avoir à modifier à plein d'endroit ton fichier xml si ton véhicule change de type par exemple
Ma petite pierre à l'édifice. Je pense avoir évité les redondances du mieux que j'ai pû.
Et encore que, j'ai longtemps hésité si je donnais une réponse après le MP que j'ai recu...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <garage> <proprios> <proprio id="" nom="" ...> <possede vehicule=""/> <possede vehicule=""/> <!-- etc --> </proprio> <!-- etc --> </proprios> <vehicules> <vehicule id="" immat="" type="" marque="" ... /> <!-- etc --> </vehicules> <mecanos> <mecano id="" nom="" ... /> <!-- etc --> </mecanos> <reparations> <reparation id="" date_entree="" date_sortie=""> <concerne vehicule=""/> <par mecano="" nbh="" /> </reparation> <!-- etc --> </reparations> </garage>
En fait...
j'enleverais plutôt le <possede vehicule="..." /> de <proprio> pour le remplacer par un attribut proprio=".." dans <vehicule>, car un vehicule a rarement plus d'un proprio et que ce sera plus rapide à retrouver le proprio d'une voiture en reparation... notamment pour la facture...
Le problème, c'est que ca fait ressembler la base XML à une base relationelle... (je me sers moins des inclusions d'éléments que propose XML...).