У меня есть форма с более чем 500 полями (это 10-страничная форма, разные типы данных). Не могли бы вы посоветовать мне, как лучше всего хранить данные из формы? Я могу создать 500 полей в нескольких логически разделенных таблицах, но это кажется большим (или, может быть, это лучший способ ?!), поскольку у меня есть несколько таких форм. Я изучаю сериализацию данных и сохранение в поле mysql с длинным текстом. У этого будут свои недостатки (я думаю о том, если клиент захочет искать в отдельных полях в будущем), но это действительно кажется довольно быстрым решением. Буду признателен, если вы поделитесь своим опытом в подобной ситуации.
3 ответа
Предположительно вы не ожидаете, что пользователь заполнит форму за один присест! Таким образом, вам понадобится какой-то рабочий процесс для хранения черновиков, изменения предыдущих копий и т. Д.
Также предполагается, что некоторые части формы являются необязательными.
Вы можете определить набор таблиц базы данных с главной таблицей для отслеживания статуса, имени пользователя и т. Д. И дочерней таблицей для каждой необязательной части формы.
Или вы можете определить схему XML, которая содержит все возможные поля в форме и т. Д., А также некоторую информацию о статусе.
Если вы всегда обрабатываете форму целиком и не хотите выполнять поиск в своей коллекции форм, то решение XML немного лучше, поскольку есть несколько изящных уловок для перемещения данных из форм XML в формы HTML и обратно. Если вам нужно искать на основе значений внутри формы, предпочтительнее решение на основе SQL.
Вам может понадобиться 500 столбцов - если их нельзя разместить в других таблицах. Трудно сказать, не увидев ваших требований.
Сериализация сделает невозможным одно из преимуществ использования базы данных - выполнение запросов к определенным значениям столбцов.
create table profile_details (
user_id number,
field_name varchar,
field_value varchar
);
Теперь вы не только не ограничены количеством полей, но и можете свободно добавлять и удалять их, продолжая разрабатывать и поддерживать свое приложение.
select firstname, lastname, zipcode
from profiles p
join profile_details d1 on (p.user_id=d1.user_id)
join profile_details d2 on (p.user_id=d2.user_id)
where d1.field_name='hobby' and d1.field_value='fishing'
and d2.field_name='income' and d2.field_value>cast(250000 as number);
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.