IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modélisation Discussion :

[Méthodologie] Comment créer un MCD après étude d'un fichier XML ?


Sujet :

Modélisation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut [Méthodologie] Comment créer un MCD après étude d'un fichier XML ?
    Bonjour,

    Je viens vers vous aujourd'hui car dans le cadre d'un projet, je souhaite mettre en place une base de données qui va regrouper un ensemble de données initialement stocké dans des fichiers XML.
    Il s'agit de plusieurs fichiers XML variant de 10Mo à 200Mo que je souhaite enregistrer dans une base de données. Ces fichiers sont récupérés dans le client d'un jeu vidéo et ils contiennent l'ensemble des "objets" utilisable en jeu par les joueurs. Il y a 300 variables au total, et j'ai 2 problèmes liés à ça:

    -Je ne connais pas forcément l'utilité de chacun des variable. (je souhaite cependant les conserver dans ma BdD)
    -Je n'ai aucune ressource me permettant d'éclaircir les variables que je n'arrive pas à comprendre.

    J'essaye actuellement de concevoir un MCD, je vais vous décrire rapidement la façon dont j'ai procédé afin que vous puissiez m'indiquer si j'avance de façon logique ou si je dois faire autrement.

    -J'ai récupéré les 3 fichiers XML, extraits l'ensemble des attributs de chaque fichier.
    - Pour chaque attribut j'ai fais une brève description de ce à quoi il correspond afin de comprendre à quel "objet" le rattacher.
    - Une fois la liste des attributs complété avec la description de chacun des attributs, j'ai vérifié si il y avait des redondances, je m'explique:
    - Est ce que l'attribut 1 du fichier 1 apparaît dans le fichier 2 et/ou 3 ?
    - Est-ce que l'attribut 1 du fichier 2 apparaît dans le fichier 1 et/ou 3 ?
    - etc.
    Ceci pour chacun des attributs. L'objectif était de supprimer les doublons.
    - A partir de là, j'ai commencé à définir les entités (MERISE) et à répartir les attributs.

    En revanche, avec cette méthode j'ai quand même quelques problèmes.

    - Par exemple, comment déterminer à quelle entité rattaché un attribut, si je ne sais pas ce qu'est cet attribut ? J'ai pensé faire une entité regroupant les attributs non compris, mais conceptuellement ce ne sera jamais bon. Une entité est censé être quelque chose de concret si j'ai bien compris le concept MERISE. Avez-vous d'autres hypothèses pour traiter ces attributs, en gardant en tête que je souhaite les conserver quand même.

    - Ensuite, un autre problème concerne le nombre d'attribut par entité. En effet, si je crée une entité "Item" qui contient la liste de tous les objets avec ses caractéristiques, ça reviendrait à avoir un MCD avec une seule entité de 300 attributs. Là encore, je ne pense pas que conceptuellement ce soit correct, et je pense qu'ensuite au niveau physique, quand la base de données sera créé, elle ne sera pas du tout optimisée. qu'en pensez-vous ?

    - Un autre élément concerne l'optimisation d'une entité. Comme je l'ai expliqué plus haut, dans ma réflexion, j'ai séparé les attributs qui n'apparaissait que dans 1 fichier XML, dans 2 fichiers ou dans l'ensemble des fichiers. J'ai fait cela car je pense qu'il est préférable de ne pas intégré un attribut apparaissant dans un seul fichier dans une table contenant des attributs apparaissant dans les 3 fichiers. Pour moi, ca reviendrait (à terme, donc au niveau physique) à créer une table avec X colonnes utilisées à 100% (toujours une donnée pour chaque occurrence dans chacune des colonnes) et une dernière colonne qui n'est exploité qu'à 5% car seulement 5% des occurences sont concernées par cet attribut (donc colonne). Qu'en pensez-vous ? Est-ce gênant ?

    J'espère que vous pourrez m'aider. Et si vous avez besoin de plus d'information pour comprendre concrètement, n'hésitez pas à me questionner. Je fournirais le fichier Excel qui m'a servit au tri des attributs.

    Merci par avance.

    AutoDiDev.

  2. #2
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Salut,

    Pour qu'on comprenne bien, quand tu parles d'attributs dans le fichier XML, tu veux dire éléments (= balises) ?

    Pour les éléments qui se retrouvent dans plusieurs fichiers, ils peuvent très bien être sémantiquement différents. Du coup, il parait sage de faire plusieurs modèles de données, du moins jusqu'à ce que tout soit éclairci et qu'on puisse les rassembler en un seul (ou modéliser les relations entre ces modèles).

    Par exemple, comment déterminer à quelle entité rattaché un attribut, si je ne sais pas ce qu'est cet attribut ? J'ai pensé faire une entité regroupant les attributs non compris, mais conceptuellement ce ne sera jamais bon. Une entité est censé être quelque chose de concret si j'ai bien compris le concept MERISE.
    Quand tu parles de rattacher un attribut (donc un élément) à une entité, j'imagine qu'il s'agit d'un sous-élément qui est imbriqué dans d'autres éléments XML ? Une seule entité contenant tout les éléments qui ne font pas encore sens me parait effectivement absurde. Je ferais plutôt autant d'entités que d'éléments non compris.

    En effet, si je crée une entité "Item" qui contient la liste de tous les objets avec ses caractéristiques, ça reviendrait à avoir un MCD avec une seule entité de 300 attributs. Là encore, je ne pense pas que conceptuellement ce soit correct, et je pense qu'ensuite au niveau physique, quand la base de données sera créé, elle ne sera pas du tout optimisée. qu'en pensez-vous ?
    Je n'ai pas très bien compris si les 300 attributs venaient du fait que les objets du jeu sont tellement variés qu'ils peuvent avoir 300 caractéristiques différentes (ce qui est très facile à faire avec XML), ou du fait qu'il y a 300 objets ?

    Le premier cas pourrait être à la rigueur modélisé avec 300 attributs, c'est conceptuellement correct bien que très sale, mais le deuxième est clairement un non-sens.

    Je pense que le travail que tu fais, si j'ai bien compris l'objectif, nécessite avant tout de déterminer si les fichiers XML en question sont en mode "schemaless" sans structure vraiment établie, ou s'il existe une règle dans leur organisation. Cela peut passer par la recherche (s'il existe) d'un schéma DTD ou XSD pour les fichiers produits par le jeu. Dans le cas de fichiers schemaless, la modélisation en MCD va être beaucoup plus difficile car on essaie un peu de faire de la salade de choux avec des carottes. Il faudra tirer des règles générales de plein de petits cas particuliers et certainement recourir à un modèle de type "dynamique" (entités et champs très génériques, avec X sous-niveaux correspondant au niveaux de l'arborescence XML).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Tout d'abord je tenais à te remercier pour ta réponse, tu as été le seul courageux à répondre à mon post .
    Je vais te fournir plus de détails que je n'avais pas mis dans le premier post de peur de faire fuir tous le monde.

    Partons sur le plus simple. Comme je le disais, les fichiers XML sont récupérés d'un jeu vidéo. Dans ce jeu, nous avons un personnage qui peut porter de l'équipement. Cet équipement est une armure composé de plusieurs pièces. Une pièce pour le torse, une pièce pour les jambes, une pièce pour les épaules, une pour les mains et une pour les bottes. Toute les données concernant tous les items étant des pièces d'armures sont contenus dans le fichiers item_armor.xml (qui fait 175Mo.

    Mon objectif, dans l'idéal, c'est de prendre ce fichier XML, et de l'uploader dans une Database (MySQL) pour l'exploiter sous 2 formes: un site qui permet de visionner, pour un item précis, la liste de ses caractéristique. Et dans un deuxième temps, un site permettant également de calculer les caractéristiques d'un joueur en fonctions de l'équipement choisit (donc la somme, pour chaque statistique, de l'ensemble des items "torse", "jambe", etc. choisi).

    Pour ce faire, j'ai selon moi, 2 choix:
    - Uploader le fichier XML directement dans la Base de données avec une méthode qui va me créer automatiquement les tables, les PK, les FK et me remplir la database avec une occurence par ID item (qui un numéro unique par objet)
    - Comment uploader directement un .XML dans ma BD MySQL ? J'ai essayé, et après traitement, l'opération a été un succès, mais 0 requêtes effectués...
    OU
    - créer un schéma de donnée (MCD) puis le MPD associé qui va me créer ma structure de la base de données. A partir de la transformer mon fichier XML et l'uploader dans la base (comment, je n'en ai aucune idée pour le moment).
    - Etudier chaque élément du fichier item_armor.xml
    - Comprendre la signification, déterminer son type (int, boolean,..)
    - créer des entités (modèle entité/association) regroupant des <élément> (de mon xml)
    - créer les associations
    - Transformer mon fichier item_armor.xml (comment ?)
    -uploader mon nouveau fichier créé (comment ?)

    Quelle solution choisir ? Dans tous les cas, il est nécessaire de comprendre le fichier item_armor.xml (et par la suite les autres fichiers items_***.xml).

    Voici donc un extrait du code XML (cet extrait présente 2 item, un avec le numéro identifiant 110101292 et l'autre portant l'identifiant 110101293):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    <client_item>
        <id>110101292</id>
        <name>rb_torso_d_n_e1_55d</name>
        <desc>STR_RB_TORSO_D_N_E1_55D</desc>
        <armor_type>robe</armor_type>
        <item_type>normal</item_type>
        <material>mat_flesh</material>
        <icon_name>Icon_Item_RB_Torso_E01</icon_name>
        <price>1727135</price>
        <extra_currency_item>coin_arena_01</extra_currency_item>
        <extra_currency_item_count>93480</extra_currency_item_count>
        <trade_in_item_list>
          <data>
            <trade_in_item>rb_torso_d_n_e1_55b</trade_in_item>
            <trade_in_item_count>1</trade_in_item_count>
          </data>
          <data>
            <trade_in_item>coin_arena_01</trade_in_item>
            <trade_in_item_count>37392</trade_in_item_count>
          </data>
        </trade_in_item_list>
        <max_stack_count>1</max_stack_count>
        <equipment_slots>torso</equipment_slots>
        <dodge>244</dodge>
        <quality>epic</quality>
        <level>55</level>
        <magical_resist>152</magical_resist>
        <physical_defend>209</physical_defend>
        <lore>FALSE</lore>
        <can_exchange>FALSE</can_exchange>
        <can_sell_to_npc>FALSE</can_sell_to_npc>
        <can_deposit_to_character_warehouse>TRUE</can_deposit_to_character_warehouse>
        <can_deposit_to_account_warehouse>TRUE</can_deposit_to_account_warehouse>
        <can_deposit_to_guild_warehouse>FALSE</can_deposit_to_guild_warehouse>
        <breakable>TRUE</breakable>
        <soul_bind>FALSE</soul_bind>
        <remove_when_logout>FALSE</remove_when_logout>
        <gender_permitted>all</gender_permitted>
        <warrior>55</warrior>
        <scout>55</scout>
        <mage>55</mage>
        <cleric>55</cleric>
        <engineer>55</engineer>
        <artist>55</artist>
        <fighter>55</fighter>
        <knight>55</knight>
        <assassin>55</assassin>
        <ranger>55</ranger>
        <wizard>55</wizard>
        <elementalist>55</elementalist>
        <chanter>55</chanter>
        <priest>55</priest>
        <gunner>55</gunner>
        <bard>55</bard>
        <rider>55</rider>
        <option_slot_value>5</option_slot_value>
        <special_slot_value>0</special_slot_value>
        <option_slot_bonus>0</option_slot_bonus>
        <bonus_attr1>maxhp 277</bonus_attr1>
        <bonus_attr2>maxmp 1214</bonus_attr2>
        <bonus_attr3>concentration 18</bonus_attr3>
        <bonus_attr4>physicaldefend 89</bonus_attr4>
        <bonus_attr5>MagicalResist 47</bonus_attr5>
        <bonus_attr6>magicalskillboost 68</bonus_attr6>
        <bonus_attr7>Boosthate -33%</bonus_attr7>
        <bonus_attr8>flyspeed 10%</bonus_attr8>
        <bonus_apply>equip</bonus_apply>
        <no_enchant>FALSE</no_enchant>
        <max_enchant_value>15</max_enchant_value>
        <cannot_extraction>TRUE</cannot_extraction>
        <cannot_changeskin>0</cannot_changeskin>
        <ui_sound_type>Sounds/item/item_def_robe</ui_sound_type>
        <cash_item>0</cash_item>
        <can_split>FALSE</can_split>
        <item_drop_permitted>FALSE</item_drop_permitted>
        <tag>Ver2.7</tag>
        <charge_way>1</charge_way>
        <charge_level>2</charge_level>
        <charge_price1>0.274286</charge_price1>
        <charge_price2>0.548571</charge_price2>
        <bonus_attr_a1>PhysicalCriticalReduceRate 15</bonus_attr_a1>
        <bonus_attr_a2>magicalCritical 5</bonus_attr_a2>
        <bonus_attr_a3>magicalCriticalReducerate 7</bonus_attr_a3>
        <bonus_attr_a4>magicalhitAccuracy 10</bonus_attr_a4>
        <bonus_attr_b1>magicalCriticalReducerate 5</bonus_attr_b1>
        <bonus_attr_b2>MagicalResist 5</bonus_attr_b2>
        <bonus_attr_b3>magicalskillboost 7</bonus_attr_b3>
        <burn_on_attack>1</burn_on_attack>
        <burn_on_defend>35</burn_on_defend>
        <bm_restrict_category>3</bm_restrict_category>
        <disposable_trade_item>World_cash_coin_post_E_55</disposable_trade_item>
        <disposable_trade_item_count>4</disposable_trade_item_count>
        <can_ap_extraction>FALSE</can_ap_extraction>
        <can_pack_count>3</can_pack_count>
        <mesh>RB_IDarena03_Body</mesh>
        <visual_slot>torso leg</visual_slot>
        <mesh_change>0</mesh_change>
        <default_color_m>255,255,255</default_color_m>
        <default_color_f>255,255,255</default_color_f>
        <can_dye>1</can_dye>
        <race_permitted>pc_light pc_dark</race_permitted>
      </client_item>
      <client_item>
        <id>110101293</id>
        <name>rb_torso_n_e1_55d</name>
        <desc>STR_RB_TORSO_N_E1_55D</desc>
        <armor_type>robe</armor_type>
        <item_type>normal</item_type>
        <material>mat_flesh</material>
        <icon_name>Icon_Item_RB_Torso_E01</icon_name>
        <price>1727135</price>
        <extra_currency_item>coin_arena_01</extra_currency_item>
        <extra_currency_item_count>93480</extra_currency_item_count>
        <trade_in_item_list>
          <data>
            <trade_in_item>rb_torso_n_e1_55b</trade_in_item>
            <trade_in_item_count>1</trade_in_item_count>
          </data>
          <data>
            <trade_in_item>coin_arena_01</trade_in_item>
            <trade_in_item_count>37392</trade_in_item_count>
          </data>
        </trade_in_item_list>
        <max_stack_count>1</max_stack_count>
        <equipment_slots>torso</equipment_slots>
        <dodge>244</dodge>
        <quality>epic</quality>
        <level>55</level>
        <magical_resist>152</magical_resist>
        <physical_defend>209</physical_defend>
        <lore>FALSE</lore>
        <can_exchange>FALSE</can_exchange>
        <can_sell_to_npc>FALSE</can_sell_to_npc>
        <can_deposit_to_character_warehouse>TRUE</can_deposit_to_character_warehouse>
        <can_deposit_to_account_warehouse>TRUE</can_deposit_to_account_warehouse>
        <can_deposit_to_guild_warehouse>FALSE</can_deposit_to_guild_warehouse>
        <breakable>TRUE</breakable>
        <soul_bind>FALSE</soul_bind>
        <remove_when_logout>FALSE</remove_when_logout>
        <gender_permitted>all</gender_permitted>
        <warrior>55</warrior>
        <scout>55</scout>
        <mage>55</mage>
        <cleric>55</cleric>
        <engineer>55</engineer>
        <artist>55</artist>
        <fighter>55</fighter>
        <knight>55</knight>
        <assassin>55</assassin>
        <ranger>55</ranger>
        <wizard>55</wizard>
        <elementalist>55</elementalist>
        <chanter>55</chanter>
        <priest>55</priest>
        <gunner>55</gunner>
        <bard>55</bard>
        <rider>55</rider>
        <option_slot_value>5</option_slot_value>
        <special_slot_value>0</special_slot_value>
        <option_slot_bonus>0</option_slot_bonus>
        <bonus_attr1>maxhp 277</bonus_attr1>
        <bonus_attr2>maxmp 1214</bonus_attr2>
        <bonus_attr3>concentration 18</bonus_attr3>
        <bonus_attr4>physicaldefend 89</bonus_attr4>
        <bonus_attr5>MagicalResist 47</bonus_attr5>
        <bonus_attr6>magicalskillboost 68</bonus_attr6>
        <bonus_attr7>Boosthate -33%</bonus_attr7>
        <bonus_attr8>flyspeed 10%</bonus_attr8>
        <bonus_apply>equip</bonus_apply>
        <no_enchant>FALSE</no_enchant>
        <max_enchant_value>15</max_enchant_value>
        <cannot_extraction>TRUE</cannot_extraction>
        <cannot_changeskin>0</cannot_changeskin>
        <ui_sound_type>Sounds/item/item_def_robe</ui_sound_type>
        <cash_item>0</cash_item>
        <can_split>FALSE</can_split>
        <item_drop_permitted>FALSE</item_drop_permitted>
        <tag>Ver2.7</tag>
        <charge_way>1</charge_way>
        <charge_level>2</charge_level>
        <charge_price1>0.274286</charge_price1>
        <charge_price2>0.548571</charge_price2>
        <bonus_attr_a1>PhysicalCriticalReduceRate 15</bonus_attr_a1>
        <bonus_attr_a2>magicalCritical 5</bonus_attr_a2>
        <bonus_attr_a3>magicalCriticalReducerate 7</bonus_attr_a3>
        <bonus_attr_a4>magicalhitAccuracy 10</bonus_attr_a4>
        <bonus_attr_b1>magicalCriticalReducerate 5</bonus_attr_b1>
        <bonus_attr_b2>MagicalResist 5</bonus_attr_b2>
        <bonus_attr_b3>magicalskillboost 7</bonus_attr_b3>
        <burn_on_attack>1</burn_on_attack>
        <burn_on_defend>35</burn_on_defend>
        <bm_restrict_category>3</bm_restrict_category>
        <disposable_trade_item>World_cash_coin_post_E_55</disposable_trade_item>
        <disposable_trade_item_count>4</disposable_trade_item_count>
        <can_ap_extraction>FALSE</can_ap_extraction>
        <can_pack_count>3</can_pack_count>
        <mesh>RB_IDarena03_Body</mesh>
        <visual_slot>torso leg</visual_slot>
        <mesh_change>0</mesh_change>
        <default_color_m>255,255,255</default_color_m>
        <default_color_f>255,255,255</default_color_f>
        <can_dye>1</can_dye>
        <race_permitted>pc_light pc_dark</race_permitted>
      </client_item>
    En voyant cette portion XML, j'en déduis que le code suit un schéma (que je n'ai pas et qu'il m'est impossible de récupérer). Certaines balises peuvent ne pas être présente d'un item à l'autre.

    Pour répondre à tes questions:

    - Oui quand je parle d'attributs, je parle des différentes balise présente dans l'élément <client_item>

    - Ensuite je parlais de 300 éléments (donc balises) dans le fichier XML. Ce n'est pas exactement ca. Il y a 3 fichiers "items" différents. Chaque fichiers regroupe des "items" différents. ET, dans chaque fichier, il peut également y avoir plusieurs sortent d'items(un fichier pour les armures, un fichier pour les armes et accessoires, un fichier pour les consommables et les livres de compétence).
    Donc, ce que j'ai fait, c'est que j'ai regroupé l'ensemble des éléments apparaissant dans les 3 fichiers et qui sont des sous éléments de <client_item>. Apres suppression des doublons je me retrouve avec 300 éléments. J'ai essayé de déterminé, pour chaque élément, à quoi il correspond ainsi que son type.

    Donc quand tu dis:
    Je n'ai pas très bien compris si les 300 attributs venaient du fait que les objets du jeu sont tellement variés qu'ils peuvent avoir 300 caractéristiques différentes (ce qui est très facile à faire avec XML), ou du fait qu'il y a 300 objets ?
    C'est exactement ca ! J'ai des fichiers qui me représente un objet "Item". Sauf que cet item, selon sa catégorie (arme, armure, accessoire, consommable...), va avoir des caractéristiques différentes (et une caractéristique correspond à un <élément> imbriqué dans <client_item>.

    Par rapport à tes remarques:
    Pour les éléments qui se retrouvent dans plusieurs fichiers, ils peuvent très bien être sémantiquement différents. Du coup, il parait sage de faire plusieurs modèles de données, du moins jusqu'à ce que tout soit éclairci et qu'on puisse les rassembler en un seul (ou modéliser les relations entre ces modèles).
    Noté ! d'ailleurs la réponse que tu es en train de lire par là-dessus, je n'étudie plus que, pour le moment, un seul fichier.

    Quand tu parles de rattacher un attribut (donc un élément) à une entité, j'imagine qu'il s'agit d'un sous-élément qui est imbriqué dans d'autres éléments XML ? Une seule entité contenant tout les éléments qui ne font pas encore sens me parait effectivement absurde. Je ferais plutôt autant d'entités que d'éléments non compris.
    Ok, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cash_available_minute
    blade_fx
    item_fx
    Ces 3 éléments je ne les comprends pas. De ce fait, je voulais les regrouper dans mon MCD dans une entité "entite_element_inconnu". Mais je dois plutôt faire 3 entité séparés. Noté !

    Donc je prends note des remarques, j'espère que les informations supplémentaires fournis pourront vous aider à m'éclairer dans la démarche que je dois suivre.

    Merci par avance et bonne soirée

  4. #4
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Je pense que tu es sur la bonne voie, mais est-ce qu'une base de données relationnelle est le meilleur moyen de stocker ces données ? Très peu d'associations, une structure "liste de courses" longue comme le bras... tu vas te retrouver avec 2-3 tables dont une aura des centaines de colonnes. Peut-être qu'un document store ou un wide-column store conviendrait mieux... voire même conserver les documents XML ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Merci pour ton intervention LuckyLuke34

    Alors, pourquoi une base de données...j'ai envie de dire pourquoi pas ! Désolé. Plus sérieusement, je pars vers une base de donnée pour plusieurs raisons:
    - Je connais un peu plus MySQL et le duo MySQL / PHP (bon ok, j'ai travaillé qu'une fois avec ) que XML/PHP.
    - Ensuite, j'ai échangé avec 2 personnes, la première est le créateur de aiondatabase.net qui est un site qui utilise les mêmes données que celle que je vous ai présenté. Il m'a expliqué avoir upload le contenu du fichier XML dans une BdD sans modifié quoi que ce soit au XML (donc une table avec plus de 100 colonnes). La seconde est également une personne qui a créé un autre site et qui fonctionne de la même façon que le premier interlocuteur que j'ai eu. Donc je me suis dit "bon si ils font ca, y'a une raison, je vais faire comme eux mais avec une base de données plus propre".
    - Enfin, j'ai essayé de savoir s'il était possible de créer un site internet se basant sur des données XML contenu dans des fichiers XML allant jusqu'à 200Mo mais je n'ai eu aucune réponse.

    Concernant les deux autres éléments dont vous avez parlé :
    un document store ou un wide-column store
    Je n'ai malheureusement aucune idée de quoi il s'agit, pourriez-vous développer un peu plus pour assouvir ma curiosité ?

    Cordialement,
    AutoDiDev

  6. #6
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Je vais schématiser, mais un SGBD relationnel répond à des besoins précis :

    • Assurer la cohérence et l'intégrité des données dans leur ensemble et les unes par rapport aux autres
    • Accéder en lecture à des croisements de données, calculs et agrégations potentiellement complexes (le langage SQL est très puissant)
    • Gérer la concurrence d'accès aux données
    • Assurer la continuité de service, la reprise sur incident, l'historisation


    Pour assurer le premier point, les bases relationnelles sont fortement structurées, avec des schémas qu'il est assez difficile de faire bouger dans le temps.

    Si on regarde ton besoin, je ne suis pas sûr que ça nécessite un outil qui a toutes les fonctionnalités ni la rigidité décrite ci-dessus : pas de modifications donc pas de problèmes d'accès concurrents, des données qui ne font pas ou très peu référence les unes aux autres, a priori peu d'utilisateurs...

    Les document stores (qui font partie du mouvement "NoSQL") sont une alternative légère plus "laxiste" où les données n'ont pas forcément besoin de suivre un schéma préétabli ni d'être croisées entre elles. Chaque paquet de données, comme par exemple, un item, est stocké dans un document (typiquement, un fichier) séparé. Contrairement à une base SQL, peu importe si chaque document diffère un peu de son voisin.

    Les wide column stores sont similaires mais en général pas basés sur des documents. Les données sont représentées en lignes et colonnes avec un nombre de colonnes dynamique.

    Ces deux types de stockage conviennent plus à des données de nature dynamique ou hétéroclite.

    L'alternative consistant à garder les fichiers XML bruts comme source de données n'est en effet peut-être pas optimale si :

    - Il y a des centaines de fichiers XML faisant jusqu'à 200 Mo (risque de saturation mémoire)
    - L'application doit faire des recherches fines sur les données contenues dans les fichiers. Ex : trouver tous les objets de niveau X, tous les objets qui boostent la compétence Y, etc. En effet, les recherches dans des fichiers XML sont moins performantes que dans des bases de données, a fortiori si de multiples fichiers de centaines de Mo doivent être chargés en mémoire pour chercher dedans.

    Je comprends l'utilisation d'une base SQL par ces personnes s'ils ont un moteur de recherche avancé qui va plonger au coeur des données pour faire des requêtes fines, avec une grande variété de requêtes. Par contre, cela nécessite pour moi de faire de l'analyse approfondie des données pour en extraire de multiples sous-entités et les placer dans des tables. Je ne pense pas que ces gens font une utilisation raisonnée ni optimale des SGBDR, car une base de données relationnelle est davantage faite pour avoir 100 tables de 4 colonnes chacune que 4 tables de 100 colonnes.

    Et pour une application qui se contente d'afficher objet par objet l'intégralité de ses données, un SGBDR me parait moins indispensable.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonjour LuckyLuke34, ravi de te lire à nouveau !

    Donc pour mon besoin, clairement je ne pourrais pas réutiliser les fichiers XML directement car justement je dois rechercher des données particulières avec plusieurs tris etc.
    Par contre, je ne dois pas non plus fonctionner comme mes comparses qui ont créé une table par fichier XML. Chaque table possède ainsi environ 40 000 lignes ce qui n'est rien pour un SGBDR, mais qui possède 150 colonnes en moyenne.

    J'ai bien avancé sur le modèle de données que je peux utiliser (j'ai ouvert une discussion en parallèle de celle-ci qui représente des parties de mon modèle.

    il me reste les 3 plus gros fichiers à conceptualiser, et pour les moments j'ai un peu de mal. J'ai également pensé à une astuce tirée de cet article: La technique des méta données de SQL Pro. Si je ne sais pas interprété tous les <éléments>, c'est que probablement, je n'en aurais pas besoin. Cependant, je veux quand même les stocker. Si je modélise de façon standard ces éléments vont devenir des attributs de mes entités, donc des colonnes de mes tables. Hors je ne peux pas choisir dans quelle entité les mettre. Avec l'article de SQL Pro j'entrevois une issue de secours pour ce cas précis. J'aurais une table qui contient X occurence par item, X étant le nombre d'éléments contenu dans le fichier XML pour cet attribut. De plus, cela me permettrait de gérer des tables avec très peu de colonne et beaucoup de ligne (environ 6 millions de ligne au total tous fichiers confondus).

    Donc je ne pense pas, malgré vos conseils avisés, m'orienter vers du document store ou wide column mais soit :
    1-Modéliser de façon standard ce qui m'obligera a comprendre l'ensemble des données des fichiers XML (ce qui n'est pas plus mal au final)
    2-Modéliser selon l'article de SQL Pro, ce qui me permettra de ne pas avoir à gérer les éléments inconnus.

    Je laisse le sujet ouvert quelques jours si vous souhaitez donnez votre avis afin de m'aider d'avantage que vous ne l'avez déjà fait, puis je le passerais en résolu.
    Merci à vous pour votre participation à cette discussion qui m'a permis de me faire avancer dans mon projet.

    Au plaisir de vous lire.
    AutoDiDev

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/06/2014, 14h21
  2. Réponses: 4
    Dernier message: 14/10/2013, 16h31
  3. Réponses: 3
    Dernier message: 01/09/2012, 09h30
  4. [WD-2007] Comment démarrer du code après le remplissage des champs XML
    Par thehope dans le forum VBA Word
    Réponses: 2
    Dernier message: 03/02/2010, 20h22
  5. Comment créer une base de donnée dans un fichier .txt
    Par vantoff dans le forum C++Builder
    Réponses: 9
    Dernier message: 19/07/2006, 19h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo