Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Подскажите как лучше положить .xml документ в базу (https://javascript.ru/forum/server/40983-podskazhite-kak-luchshe-polozhit-xml-dokument-v-bazu.html)

Гробовщик 27.08.2013 09:07

Подскажите как лучше положить .xml документ в базу
 
Доброго времени суток. Не ругайтесь сильно. Ситуация такая: есть у меня xml-файл и скрипт его обрабатывающий, в конечном итоге он выглядит так:
Скрытый текст найти не удалось(((
Код:

Element: DOCUMENT
  Attribute: PROGRAMVERSION = 5.5.2.2894
  Attribute: GENERATOR = GrandSmeta
  Attribute: DOCUMENTTYPE = {2B0470FD-477C-4359-9F34-EEBE36B7D340}
  Element: REGIONINFO
      Attribute: REGIONNAME = Омская область
      Attribute: REGIONID = 550
      Attribute: ZONE84ID = 1
      Attribute: ZONE01NAME = Омская область
      Attribute: ZONE01ID = 1
  Element: PARAMETERS
      Attribute: OPTIONS = AddZatr SeparateFot
      Attribute: BASEPRICES = 2001
      Attribute: BASECALCVRS = Vr2001
      Attribute: BLOCKROUNDMODE = Smart
      Attribute: TEMPZONE = 1
      Attribute: MATROUNDMODE = SignDigitsPreserveInt
      Attribute: MATDIGITS = 4
      Attribute: ITOGOPTIONS = SeparateVrs
      Attribute: FIRSTITOGITEM = K
      Attribute: ITOGEXPANDTO = Default
      Attribute: TZDIGITS = 2
      Attribute: POSKDIGITS = 2
      Attribute: MULTKPOSCALCMODE = UseTotalMult
      Attribute: PROPSCONFIGNAMEMODIFIED = Yes
      Element: COMMONNK
        Attribute: METHODKI = 0,85
        Attribute: ACTIVEITEMS = Vk Ck Mk
      Element: COMMONPK
        Attribute: METHODKI = 0,8
        Attribute: ACTIVEITEMS = Vk Ck Mk
  Element: INDEXES
      Attribute: INDEXESMODE = PosOne
      Attribute: INDEXESLINKMODE = Default
      Element: INDEXESPOS
        Element: INDEX
            Attribute: CODE = ТЕР18-03-001-02
            Attribute: OZ = 18,79
            Attribute: EM = 9,31
            Attribute: ZM = 18,79
            Attribute: MT = 7,31
        Element: INDEX
            Attribute: CODE = ТЕР18-03-004-08
            Attribute: OZ = 18,79
            Attribute: EM = 8,77
            Attribute: ZM = 18,79
            Attribute: MT = 7,44
        Element: INDEX
            Attribute: CODE = ТЕР15-04-030-03
            Attribute: OZ = 18,79
            Attribute: EM = 8,98
            Attribute: ZM = 18,79
            Attribute: MT = 1,86
        Element: INDEX
            Attribute: CODE = ТЕР16-05-003-01
            Attribute: OZ = 17,57
            Attribute: EM = 5,82
            Attribute: ZM = 17,57
            Attribute: MT = 3,17
        Element: INDEX
            Attribute: CODE = ТЕР16-05-001-01
            Attribute: OZ = 18,79
            Attribute: EM = 5,26
            Attribute: ZM = 18,79
            Attribute: MT = 3,23
        Element: INDEX
            Attribute: CODE = ТЕРм11-02-001-01
            Attribute: OZ = 18,79
            Attribute: MT = 2,91
        Element: INDEX
            Attribute: CODE = ТЕР16-02-001-01
            Attribute: OZ = 18,79
            Attribute: EM = 6,95
            Attribute: ZM = 18,79
            Attribute: MT = 4,7
        Element: INDEX
            Attribute: CODE = ТЕР16-02-001-04
            Attribute: OZ = 18,79
            Attribute: EM = 6,95
            Attribute: ZM = 18,79
            Attribute: MT = 4,77
        Element: INDEX
            Attribute: CODE = ТЕР16-02-001-05
            Attribute: OZ = 18,79
            Attribute: EM = 6,95
            Attribute: ZM = 18,79
            Attribute: MT = 4,8
        Element: INDEX
            Attribute: CODE = ТЕР16-02-001-06
            Attribute: OZ = 18,79
            Attribute: EM = 7,34
            Attribute: ZM = 18,79
            Attribute: MT = 5,58
        Element: INDEX
            Attribute: CODE = ТЕР16-02-005-03
            Attribute: OZ = 17,57
            Attribute: EM = 4,17
            Attribute: ZM = 17,57
            Attribute: MT = 6,27
        Element: INDEX
            Attribute: CODE = ТЕР16-02-005-04
            Attribute: OZ = 18,79
            Attribute: EM = 4,57
            Attribute: ZM = 18,79
            Attribute: MT = 6,38
        Element: INDEX
            Attribute: CODE = ТЕР16-02-005-05
            Attribute: OZ = 18,79
            Attribute: EM = 4,57
            Attribute: ZM = 18,79
            Attribute: MT = 6,27
        Element: INDEX
            Attribute: CODE = ТЕР16-02-005-06
            Attribute: OZ = 17,57
            Attribute: EM = 4,06
            Attribute: ZM = 17,57
            Attribute: MT = 5,29
        Element: INDEX
            Attribute: CODE = ТЕР13-03-002-04
            Attribute: OZ = 18,79
            Attribute: EM = 6,98
            Attribute: ZM = 18,79
            Attribute: MT = 3,66
        Element: INDEX
            Attribute: CODE = ТЕР13-03-004-23
            Attribute: OZ = 18,79
            Attribute: EM = 7,15
            Attribute: ZM = 18,79
            Attribute: MT = 8,24
        Element: INDEX
            Attribute: CODE = ТЕР26-01-009-01
            Attribute: OZ = 17,57
            Attribute: EM = 8,21
            Attribute: ZM = 17,57
            Attribute: MT = 3,2
        Element: INDEX
            Attribute: CODE = ТЕР16-02-001-02
            Attribute: OZ = 18,79
            Attribute: EM = 6,95
            Attribute: ZM = 18,79
            Attribute: MT = 4,72
        Element: INDEX
            Attribute: CODE = ТЕР16-02-001-03
            Attribute: OZ = 18,79
            Attribute: EM = 6,95
            Attribute: ZM = 18,79
            Attribute: MT = 4,73
        Element: INDEX
            Attribute: CODE = ТЕР16-02-005-02
            Attribute: OZ = 18,79
            Attribute: EM = 4,69
            Attribute: ZM = 18,79
            Attribute: MT = 6,61
        Element: INDEX
            Attribute: CODE = ТЕР26-01-017-01
            Attribute: OZ = 18,79
            Attribute: EM = 8,86
            Attribute: ZM = 18,79
            Attribute: MT = 3,15
        Element: INDEX
            Attribute: CODE = ТЕР16-07-005-01
            Attribute: OZ = 18,79
            Attribute: EM = 51,69
            Attribute: ZM = 18,79
            Attribute: MT = 5,08
        Element: INDEX
            Attribute: CODE = ТЕР16-07-005-02
            Attribute: OZ = 18,79
            Attribute: EM = 51,69
            Attribute: ZM = 18,79
            Attribute: MT = 5,33
        Element: INDEX
            Attribute: CODE = ТЕР16-05-001-02
            Attribute: OZ = 18,79
            Attribute: EM = 5,68
            Attribute: ZM = 18,79
            Attribute: MT = 2,99
        Element: INDEX
            Attribute: CODE = ТЕР16-05-001-03
            Attribute: OZ = 18,79
            Attribute: EM = 5,6
            Attribute: ZM = 18,79
            Attribute: MT = 3,02
        Element: INDEX
            Attribute: CODE = ТЕРм07-04-027-01
            Attribute: OZ = 18,79
            Attribute: EM = 8,73
            Attribute: ZM = 18,79
            Attribute: MT = 7,73

И ещё очень много строк. Файлов таких может быть много, каждый файл относиться к своему объекту (стройке). Как более правильно создать структуру БД, что бы потом ни сервер ни я не запутались? Просто хочется всё сделать правильно, по совету более опытных товарищей, нежели самому лепить чёрти чё...

Tim 27.08.2013 14:58

В поле типа TEXT. Можно сериализовать. Некоторые данные из документа можно продублировать в отдельных полях, чтобы потом удобнее было делать всевозможные выборки и сортировки.

Гробовщик 28.08.2013 13:09

Tim,
На самом деле я наверное не совсем корректно задал вопрос, интерес у меня вызвала структура БД и как её описать, в итоге все Element у меня стали именами таблицы а Atribute именами полей, то чему равно это значение.Получилось достаточно неплохо, но бессвязно, теперь думаю как бы лучше их связать. В голову идёт только одна мысль-проставить автоматическую нумерацию

Tim 28.08.2013 14:09

Я бы сделал таблицу DOCUMENT, в неё бы засунул инфу из разделов REGIONINFO, PARAMETERS и тп. И таблицу Elements со связью OneToMany. Туда бы засунул вот эти штуки:
Код:

Element: INDEX
Attribute: CODE = ТЕР16-05-001-03
Attribute: OZ = 18,79
Attribute: EM = 5,6
Attribute: ZM = 18,79
Attribute: MT = 3,02



Цитата:

проставить автоматическую нумерацию
Ну первичный ключ должен быть у всех таблиц. И он обычно с автоматической нумерацией

Код:

CREATE TABLE IF NOT EXISTS users (
  `id` INT(10) unsigned NOT NULL AUTO_INCREMENT,          -- Идентификатор

Возьми что нибудь вроде MySQL Workbench. Там таблицы в визуальном редакторе накидаешь. На диаграмме связи укажешь и в БД экспортируешь.

Гробовщик 02.09.2013 11:15

Tim,
Достаточно неплохой вариант, но всё же удалось мне сделать так как я описал выше, и к каждой таблице прописал "параграф", теперь по нему удобно искать записи из бд


Часовой пояс GMT +3, время: 07:32.