Есть ли способ хранить несхематизированные данные в базе данных sqlJAVA

Программисты JAVA общаются здесь
Anonymous
Есть ли способ хранить несхематизированные данные в базе данных sql

Сообщение Anonymous »

mysql: 5.6 java: 11
Мне нужен механизм для хранения несхематизированных данных в моей базе данных. дело обстоит следующим образом.
Цель:
получить всех пользователей из стороннего приложения и сохранить их в базе данных.Проблема:
поскольку атрибуты разных приложений различаются. Пример (у некоторых может быть атрибут IS_ACTIVE, у некоторых его нет, а есть другой, например IS_DELETED, который недоступен в предыдущем приложении), поэтому невозможно создать таблицу для хранения всех пользователей неизвестные атрибуты.
Опробованные методы
Метод 1: Значение атрибута сущности модель
1.1 у меня будет таблица для сущностей со значениями типа ({id: 1,entity: customAppOne})
1.2 таблица для атрибута типа ({aid: 1, attrName: "имя", входящая: "имя", исходящая: "имя пользователя"})
1.3 и, наконец, таблица значений типа ({entityId: 1, help: 1, value: "testUserName"})
сталкивающиеся недостатки:
вместо хранения пользовательских данных типа ({name: testUserName, age: 2, mail: test@test.com})
Каждое значение сохраняется в нескольких строках, например

Код: Выделить всё

[{entityId : 1, aid : 1, value : "testUserName"},
{entityId : 1, aid : 2, value : "2"},
{entityId : 1, aid : 3, value : "test@test.com"}]
таким образом, в случаях с 1 миллионом пользователей с 20 различными атрибутами размер таблицы увеличивается в 20 раз.
Метод 2: столбцы плацебо[/b]
будет иметь 2 таблицы: одну для атрибута, а другую для значения.
Таблица атрибутов будет иметь вид ({aid: 1, attrName: "testName" , columnsName : "col2"})
схема таблицы значений будет содержать 100 столбцов, каждый из которых имеет имя "col1", "col2", "col3",.. . "col100"
и таблица значений будет выглядеть так:

Код: Выделить всё

{id:1, col1 : null, col2 : "testName", col3 : null}
(для остальных столбцов 97 будет иметь значение null
Недостатки
Это решает проблему неизвестного имени столбца а также запись в одну строку, но использование 100 столбцов только потому, что мы не знаем количества параметров и имени параметра, кажется дорогостоящим, также учитывая трудности запроса.
Метод 3 : JSON
поскольку MySQL поддерживает JSON, я попытался поместить все пользовательские данные в формате JSON и сохранить их непосредственно в таблице, а также поскольку я могу запрашивать и выполнять операции CRUD с помощью функций JSON, предоставляемых mysql. мне не нужно все переписывать, чтобы решить все проблемы
Недостатки
Основным недостатком является то, что используемая мной структура базы данных не поддерживает JSON, хотя если я найду альтернативу (которую невозможно изменить только для этого), рассмотрите запрос на обновление второстепенного статуса, где возраст> 18. в отличие от столбца, где в json ищется только указанный столбец, все ключи будут искаться для всех пользователей, что ооочень неэффективно. У меня закончились идеи, может кто-нибудь мне помочь?

Подробнее здесь: https://stackoverflow.com/questions/787 ... l-database

Вернуться в «JAVA»