Как спроектировать БД с переменным количеством параметров?

Очень давно не занимался БД, да и знал только основы, сейчас появилась нужда спроектировать с неизвестным количеством параметров, и с возможно дальнейшим добавлением этих параметров.
Насколько хватило остаточных знаний сделал, но не уверен, нужна оценка экспертов, и если сделано неверно, пинок в нужную сторону.
в табличке показано ожидание от этой БД.
59f6f38c0c465834872649.png
  • Вопрос задан
  • 2640 просмотров
Пригласить эксперта
Ответы на вопрос 3
djdeniro
@djdeniro
DeNet
Есть два пути:

  • Использовать JSON, и столбец params, в который загонять все эти параметры, например {"param_1":"value_1", "param_999":"value_999"}

  • Создать еще одну таблицу с полями: id, person_id, name, value, где person_id - id из таблицы person, name - название параметра, value - значение
,
Ответ написан
@cicatrix
было бы большой ошибкой думать
На одних RDBMS свет клином не сошёлся. Посмотрите в сторону nosql, мне кажется, вам это больше подойдёт.
Ответ написан
Комментировать
DimonSmart
@DimonSmart
Kaspersky Lab Developer
Я рекомендую посмотреть в сторону EAV. Но!!! Смотреть очень внимательно. Там есть очень большая куча плюшек и примерно такая же куча ....хм.... не плюшек. Выбирать только вам.
И добавлю сюда ссылку на очень похожее обсуждение:
Как хранить абстрактные модели данных в реляционных БД?

Кстати, постарайтесь почёте сформулировать ваш вопрос. Возможно, если этих самый неизвестных параметров будет немного - то лучшим способом будет простое расширение табличек.
В сторону EAV надо смотреть если у вас количество и сами параметры могут сильно отличаться от объекта к объекту. И сами эти параметры могут появляться стихийно по желанию ваших пользователей.
Так же очень рекомендую рассмотреть компромиссный вариант, в котором у вас будет использоваться классическая структура полей и таблиц. И где-то рядом к ней будет пристёгнута структура EAV для экспериментов с полями. В этом случае основная нагрузка будет на классические структуры а все эксперименты с дополнительными полями будут по сути отдельно.
В случае если какое-то из экспериментальных дополнительных полей в последствии станет очень нужным и всем необходимым - то никто не мешает зарефакторить структуру БД и перенести это поле в основные таблицы....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы