После такого примера для этого может быть банк вопросов для пользователя и тест. В будущем может быть много отношений, которые могут возникнуть.Лучше хранить данные в нескольких строках или только в одном 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, а когда нет?
Причина пуха голосования могло быть оценена .. – atjoshi
Не преждевременно оптимизировать. Для реляционной базы данных - если информация всегда * что-то меньшее, чем «непрозрачный блок», она лучше всего подходит для ее нормализации. Без правильной нормализации невозможно написать запросы SARGABLE или обеспечить прямую ссылочную целостность. (Некоторые RDBMS-механизмы позволяют очерчивать JSON/XML, но это еще может ...) – user2864740
Также должно быть исправлено количество столбцов в SQL (есть некоторые проблемы, для которых это исключение, но опять же: только расширенное использование) поскольку члены класса фиксированы. Множество SQL работает по строкам. – user2864740