Sql DB Driven веб-приложение архитектуры вопрос - PullRequest
1 голос
/ 15 августа 2011

Я создаю бизнес-веб-приложение среднего размера, данные сохраняются в базе данных MySQL.

Я пытаюсь придумать способ добавления определенных выбираемых «виджетов» в это приложение (например, виджет валюты - который будет отображать указанные пользователем валюты, когда веб-приложение будет видно), но мне трудно решить, как сохранить данные и настройки виджета на пользователя, так как виджеты не имеют общей базы.

Например, настройки виджета валюты полностью отличаются от, скажем, виджета погоды. Для одного потребуется список желаемых валют, а для другого - целевое местоположение погоды.

Я подумал о решении вышеизложенного, сохранив все данные настроек виджета, закодированные в столбце «widgetData» таблицы БД, которая будет содержать userId, widgetId и widgetData. Я выбрал JSON в качестве способа кодирования, и каждый раз, когда пользователь пытается загрузить свою страницу, мне приходится декодировать ее настройки и передавать пользователю нужные данные на основе настроек.

То же самое относится и к сохранению фактических данных виджета, у которого нет общей базы.

Надеюсь, я смогу решить эту проблему с помощью структуры данных NO-SQL в следующий раз, но это не относится к текущему проекту.

Ответы [ 3 ]

1 голос
/ 15 августа 2011

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

С другой стороны, если вы хотите / должны запрашивать в столбце, который содержит структурированные данные, XML является лучшим вариантом, чем JSON (прямо сейчас): http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue

1 голос
/ 15 августа 2011

Модель базы данных Значение атрибута сущности будет очень полезна для вас в этом сценарии.

Она гораздо более гибкая, чем JSON, XML или другие типы форматов, поскольку работает в вашем стандарте.Хранение данных SQL, хотя и другим способом.

0 голосов
/ 17 сентября 2017

Если ваши виджеты отображаются в браузере с помощью Javascript, тогда ваше решение отлично.Ваш widgetData остается строкой JSON, в Javascript вы используете JSON.parse(), чтобы превратить его в объект и визуализировать его, и JSON.stringify(), чтобы превратить его в строку перед отправкой обратно на ваш сервер.

...