2016-10-01 13 views
1

После такого примера для этого может быть банк вопросов для пользователя и тест. В будущем может быть много отношений, которые могут возникнуть.Лучше хранить данные в нескольких строках или только в одном json в MYSQL?

Когда пользователь задает вопросы в наборе, возникает множество случайных чисел. Так при подаче этого набора это хорошо для хранения данных определенного набора как JSON или несколько строк

Подход 1

QuesTable

id | ques 

UserTable

id | username | setinfo 

Где setinfo может быть сохранен как json для определенного пользователя для любого количества создаваемых им наборов, , когда пользователь создает набор, мы можем добавить данные в этом json.

{ 
    "sets": [ 
    { 
     "set1": [ 
     { 
      "q1": { 
      "given_answer": "a", 
      "some_key1": "some_value1", 
      "some_key2": "some_value2" 
      }, 
      "q2": { 
      "given_answer": "c", 
      "some_key1": "some_value1", 
      "some_key2": "some_value2" 
      }, 
      "q3": { 
      "given_answer": "b", 
      "some_key1": "some_value1", 
      "some_key2": "some_value2" 
      } 
     } 
     ] 
    }, 
    { 
     "set2": [ 
     { 
      "q1": { 
      "given_answer": "a", 
      "some_key1": "some_value1", 
      "some_key2": "some_value2" 
      }, 
      "q2": { 
      "given_answer": "c", 
      "some_key1": "some_value1", 
      "some_key2": "some_value2" 
      }, 
      "q3": { 
      "given_answer": "b", 
      "some_key1": "some_value1", 
      "some_key2": "some_value2" 
      } 
     } 
     ] 
    } 
    ] 
} 

ПОДХОД 2

Его же, но мы можем создать еще одну таблицу для набора информации и хранить каждый набор как свой собственный идентификатор

QuesTable

id | ques 

UserTable

id | username 

user_set_table

id | userid | setinfo 

Здесь каждый раз, когда пользователь создает набор будет создать новый столбец в user_set_info и используя FK идентификатор пользователя где каждый SetInfo является

[ 
    { 
    "q1": { 
     "given_answer": "a", 
     "some_key1": "some_value1", 
     "some_key2": "some_value2" 
    }, 
    "q2": { 
     "given_answer": "c", 
     "some_key1": "some_value1", 
     "some_key2": "some_value2" 
    }, 
    "q3": { 
     "given_answer": "b", 
     "some_key1": "some_value1", 
     "some_key2": "some_value2" 
    } 
    } 
] 

APPROACH3

QuesTable

id | ques 

UserTable

id | username 

User_Set_Info

id | userid | quesid | given_ans | somekey1 | somekey2 

Здесь вопрос, если пользователь дает тест, который имеет 100 вопрос, так что будет создавать 100 строк и потребностей 100 в sertion hard запрос может быть одинарным.

Это хорошая идея сделать несколько строк? Когда лучше всего использовать json в столбце mysql, а когда нет?

+0

Причина пуха голосования могло быть оценена .. – atjoshi

+0

Не преждевременно оптимизировать. Для реляционной базы данных - если информация всегда * что-то меньшее, чем «непрозрачный блок», она лучше всего подходит для ее нормализации. Без правильной нормализации невозможно написать запросы SARGABLE или обеспечить прямую ссылочную целостность. (Некоторые RDBMS-механизмы позволяют очерчивать JSON/XML, но это еще может ...) – user2864740

+1

Также должно быть исправлено количество столбцов в SQL (есть некоторые проблемы, для которых это исключение, но опять же: только расширенное использование) поскольку члены класса фиксированы. Множество SQL работает по строкам. – user2864740

ответ

1

Вопросы, которые вы должны задать себе:
- легко ли получить данные?
- Являются ли данные легко обновляемыми?
- Какова долговечность моих данных, если я изменю модель позже?

реляционные базы данных ответить на эти вопросы:
- выберите
- ОБНОВЛЕНИЕ
- ALTER и UPDATE

При использовании хранения JSON, могут возникнуть проблемы, чтобы изменить данные, уменьшающие резко долговечность вашего базы данных и сделать ее более трудной для поддержания.

Принимая свое решение о хранении данных, всегда думает CRUD и ACID

 Смежные вопросы

  • Нет связанных вопросов^_^