Есть большой xml, где МНОГО-МНОГО атрибутов. Этот xml должен храниться в БД. И таких типов xmlей у меня будет 14. Сейчас пока черновой вариант, без фреймворка, но в последствии надо будет еще как-то прикрутить ORM. Не знаю что мне делать.
Вчера сделала так - на каждый атрибут сделала отдельное поле в таблице. Сегодня кажется, что я сделала какую-то хрень.
Понимаю, что лучший вариант - это хранить как-то в массиве. Но как это можно связать ORM и массив?
Как это можно организовать и какой паттерн проектирования использовать?
ну вы бы хоть написали, что вы собираетесь делать: вытягивать данные из файлов или просто заливать их в базу, а то в заголовке "как хранить xml в бд?", а в описании вы все-таки собираетесь хранить данные из xml. а еще можно пример файла выложить.
наделать отдельных таблиц на каждую сущность (описываемый в файле тип объекта), в таблицах поля - атрибуты сущностей. связать таблицы между собой по вкусу.
Если вы хотите десериализовать xml в набор данных по таблицам, то стандартный простейший вариант - таблица полей(id,nameNode) и таблица значений(NodeId,Value). Но вообще в СУБД должен быть спец.тип xmlData
Мало данных, xml хранится как файл, его кто-то будет запрашивать? Тогда пусть будет файл и данные из БД выгружаются в него раз в сутки, допустим. Зачем xml хранить в БД? Его много и часто запрашивают? Тогда можно отдавать в другом виде.
Дмитрий, а потом как всё загружу, надо как-то cronом это всё сканировать - не добавил ли пользователь новых файлов. Если есть какие-то новые файлы - тоже загружать их в xml.
iKapex: xml вам загружают, распарсить его и внести в БД только данные. Откуда данные могут обновится? Только через xml? Тогда зачем cron обновим данные когда загрузят новый xml! Или из другого места могут обновится например? Что будет если они обновились, они куда-то тут же выводятся?
Дмитрий: сейчас у меня на руках много xmlей разных типов. я их сейчас пока сама загружаю. но в финале надо будет настроить проект на определенную папку на серваке, и сканировать там на добавление новых файлов и если есть - заносить данные в бд.
iKapex: Вы пишите программу, которую будете запускать на сервере (например, через sheduler) или же пишите процедуру в БД, которая будет запускаться по таймеру? В любом случае, можете хранить в БД образец последнего xml-файла, дату его загрузки. Потом при запуске сравниваете два xml-файла между собой и изменения вносите в таблицу или куда-там хотите. Затем меняете старый xml-файл в БД на новый. И повторяете с той периодичностью, которая вам подходит.