Тема: Як зберегти Json в БД

Є структура Json без вкладень.

Наприклад:

Назва: User

{
name: "Some Name",
age: 27,
sex: true
}

або

Назва: Event

{
EventName: "Some Event Name",
isFree: false
}

В Json може бути мінімум одна змінна, максимум 20. Вкладення або масиви не допускаються.

Потрібно придумати схему для того щоб розміщувати такі Json дані у БД як таблиці, а потім легко вибирати дані SELECT'ом 

Наприклад

SELECT * FROM Object[n] WHERE Name="Event" --тут ще потрібно додати JOIN щоб побачити всі данні, але думаю ідея зрозуміла

Поки що я придумав зробити 20 таблиці Object[1-20] в яких буде:
0) id,
1) назва Json'ну,
2) і в кожній таблиці на одне більше поле яке посилається на таблицю "Var"

Table: Object[1-20]
-Id
-Name
-Ref_To_Var1
-Ref_To_Var2
***
-Ref_To_Var20

Table: Var
-Id
-Name (Var Name)
-Value

Питання: Чи можна зробити схему без дублювання цих 20 таблиць Object ? Якщо так, як ?

2 Востаннє редагувалося FakiNyan (26.11.2020 18:44:57)

Re: Як зберегти Json в БД

нашо робити 20 таблиць, мона зробити одну, котра матиме всі можливі атрибути, і якщо в JSON немає кількох атрибутів, то просто записувати в базу даних null'и

Подякували: koala, Betterthanyou2

3

Re: Як зберегти Json в БД

А в чому проблема зберігати весь JSON в одному полі таблиці й при потребі витягати те що потрібно?

Подякували: koala, Betterthanyou, flatliner3

4 Востаннє редагувалося koala (26.11.2020 18:59:51)

Re: Як зберегти Json в БД

Для JSON-ів придумали NoSQL. Хоча, звісно, можна і в SQL зберігати.
У вас JSON-и обмеженої кількості типів, чи потім можуть додаватися динамічно? А редагувати їх у базі будуть? Наскільки критична швидкість?
В цілому, SQL придумали для роботи із сутностями. Сутності мають певні обмеження і типи, звідси беруться таблиці для однотипних сутностей. Якщо вам треба зберігати саме тип "JSON", і потім шукати по них, то десь так (псевдокодом):

CREATE TABLE json (
    json_name VARCHAR NOT NULL,
    var_name VARCHAR NOT NULL,
    type INT NOT NULL, --код типу
    value_s VARCHAR NULL,
    value_n INT NULL,
    value_b BOOL NULL,
    PRIMARY KEY(json_name, name)
);

А потім якось так:

SELECT * 
FROM json 
WHERE json_name = (SELECT json_name FROM json WHERE json.var_name="Some Name")
ORDER BY json_name

У такій формі це не дуже ефективно, але можна дещо доопрацювати - скажімо, винести імена в окремі таблиці, а в цій працювати з числами-id. Якщо таке підійде. Хоча, звісно, якщо про предметну область відомо більше, то треба на неї орієнтуватися.

Подякували: Betterthanyou, ejeximuvu-0337, FakiNyan3

5

Re: Як зберегти Json в БД

Звісно, якщо не треба ані шукати по вмісту, а ні редагувати JSON-и, тоді зберігайте їх VARCHAR-ами і не партеся.

6 Востаннє редагувалося fed_lviv (26.11.2020 19:08:09)

Re: Як зберегти Json в БД

Так можна й шукати, й редагувати, й витягати потрібні поля.... звісно все залежить від СУБД, але популярні СУБД  норм працюють з JSON:
SQL:2016
SQL/JSON standard-2016 conformance for PostgreSQL, Oracle, SQL Server and MySQL

Подякували: FakiNyan, koala, Betterthanyou, flatliner4