XML файлын қалыпты дерекқор схемасына талдау

Менде дерекқорға қалыпты тәртіпте талдауды қалайтын xml файлы бар. Кесте екеуі - көптеген қарым-қатынас кестесін құруға болатын идея. Атауы, атауы әр файл тобына ешқашан өзгермейді, бірақ жүктеу жолдары әр түрлі болады.

1-кесте

id | name        | title                         | download_path
----------------------------------------------------------------------
1  | FileGroup 1 | This is the first file group  | /this/1/1.zip
2  | FileGroup 1 | This is the first file group  | /this/1/2.zip
3  | FileGroup 2 | This is the second file group | /this/2/1.zip
4  | FileGroup 2 | This is the second file group | /this/2/2.zip
5  | FileGroup 3 | This is the third file group  | /this/3/1.zip

XML файлы


    File Group 1
    <title>This is the first file group</title>
    /this/1/1.zip


    File Group 1
    <title>This is the first file group</title>
    /this/1/2.zip


    File Group 2
    <title>This is the second file group</title>
    /this/2/1.zip


    File Group 2
    <title>This is the second file group</title>
    /this/2/2.zip


    File Group 3
    <title>This is the third file group</title>
    /this/3/1.zip

2-кесте

group_id | file_id
-----------------------------
1        |   1
1        |   2
2        |   3
2        |   4
3        |   5

What is the best way to do this when parsing through the XML. If i put the xml data into an array and foreach through each item, i need to be able to able to group them on the fly and create the relationship in 2-кесте. I did have the idea of just creating 1-кесте and then afterwards building the relationship table, but even then then i dont know how best to group them. I have nothing in the xml to say they are grouped other that name and title. Each group can have any number of file download paths.

I do not have any say on the xml файлы creation. Its all I have to deal with.

1

1 жауаптар

Сіздің кесте құрылымыңыз қалыпқа келтірілмеген. Сіз бір FileGroup/тақырып жолын басқасын жаңартпай жаңарта аласыз, бұл дұрыс емес. Оның орнына, FileGroup/Title бір кестеде болуы керек және FileGroup/download_path басқа кестеде болуы керек.

Xml-ге негізделген ДБ-ны ұйымдастыру туралы, xml-тің түйін арқылы талдауын елестетіңіз:

$groups = array();
foreach ($Items as $Item) {
   if (!isset($groups[$Item->Name])) {
      $groups[$Item->Name] = array(
         'title' => $Item->Title
         , 'files' => array();
      );
   }
   $groups[$Item->Name]['files'][] = $Item->DownloadPath;
}

Сіздің мысалыңыздағы xml-ақ жарамсыз, егер бұл шынымен болса, сәттілік өңделеді.

0
қосылды
@madphp Кесте 2NF емес. Тақырыбы тек атаумен функционалды түрде байланысты. Алайда, атау кандидаттың кілті емес. Бұл 2NF-ды бұзады.
қосылды автор Explosion Pills, көзі
рахмет сіз дұрыс. Менің XML-ң жақсы, қарапайым етіп жасау үшін жоғарыда келтірілген мысалды тез арада редакцияладым. Мен өзгерістер жасадым. Мен схемаға қайтадан қараймын.
қосылды автор madphp, көзі
Сондай-ақ, жоғарыдағы кесте деректер базасын қалыпқа келтірудің екінші қалыпты түрі болып табылады. Мен бұл жақсы болуы мүмкін екенін мойындаймын.
қосылды автор madphp, көзі
Рақмет сізге. Мен осы мәселе бойынша басқа сұрақ аштым, егер сіз оған барғыңыз келсе. stackoverflow.com/questions/7933982/xml-parsing-conundrum
қосылды автор madphp, көзі