Oracle - использование XMLType или Name = Value Pairs (EAV) - PullRequest
1 голос
/ 21 июля 2011

Я работаю над созданием модели данных для журнальной информации.

Информация журнала может иметь переменные элементы, и это очень динамично.

Какой тип модели данных должен работать лучше? Использовать столбец XMLType или дочернюю таблицу с парами Имя = Значение?

Я хочу избежать создания нескольких столбцов, поскольку они являются динамическими по своей природе и могут меняться очень часто.

Я знаю, что модель EAV не очень хороша для запросов, но из того, что я слышал, Oracle 11g предоставляет функцию PIVOT, которая может транспонировать строки в столбцы и как это повлияет на производительность?

Загруженные данные будут использоваться для последующих систем ETL, а также для периодических запросов техническими аналитиками

Спасибо


Раджеш ... Я планирую создать 2 таблицы:

Родительская таблица с общими атрибутами, которые являются частью каждого события журнала, в то время как дочерняя таблица будет иметь идентификатор родительской таблицы (logId) и иметь другие транзакционные элементы.

В настоящее время кроме стандартных элементов имеется 200 элементов, и любое событие журнала может содержать до 10 различных элементов. Также это число очень изменчиво и может меняться очень часто. Не имеет смысла продолжать изменять структуру данных таблицы каждый раз, когда появляются новые элементы.

Кроме того, данные не будут храниться более 7 дней, и таблица не будет использоваться (или время от времени) для запросов. Будет нижестоящее задание ETL, которое будет извлекать данные и выполнять преобразования плоских файлов.

Меня не беспокоит тип данных, потому что все это строковые данные. Видите ли вы какие-либо проблемы с этим подходом?

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Я бы склонялся к столбцам для известных «почти всегда» и XML для любых битов, которые были слишком индивидуализированы для столбцов.XML, вероятно, будет проще для ETL, если есть какая-то схема для работы (возможно, но не обязательно, с применением базы данных).

0 голосов
/ 21 июля 2011

EAV-модели (очень быстро) становятся слишком сложными для Query, даже с операторами Pivot. Подзапросы, вложенные запросы и объединения будут трудны для написания и понимания и будут менее производительными.

Помимо производительности, вы не можете гарантировать, что данные хранятся правильно (дата в столбце «Дата», номер в столбце «число» и т. Д.). Это будет означать, что вы сохраняете все в Strings и конвертируете его обратно в правильный тип данных, надеясь, что он был вставлен правильно с первого раза. Прочитайте этот документ для различных побочных эффектов. http://antognini.ch/papers/DatatypesWorstPractices_20080509.pdf

Даже в случае ведения журнала есть несколько общих параметров, которые вы хотите отслеживать для большинства журналов, и только несколько, которые относятся к некоторым журналам. Создание таблицы со столбцами NULLLable для этих специальных полей - лучший подход. Вы всегда можете индексировать наиболее важные поля и создавать представления, относящиеся к определенному типу журналов, если вы хотите видеть / выставлять только некоторые поля.

...