Создание HTML-формы из базы данных и сохранение значения в базе данных
У меня есть таблица "t_form" и таблица "t_attribute". Это выглядит немного как ниже.
Таблица форм
form_id | form_name | description
-----------------------------------
1 | Laptop | Possible attributes are Model, Screen Size, OS, Cd Player
2 | Mobile | Possible attributes are Model, OS
3 | Tablet | Possible attributes are Model, Screen size, OS
Таблица атрибутов
attribute_id | attribute
------------------------
1 | Model
2 | Screen Size
3 | OS
4 | Cd Player
- возможными атрибутами вида ноутбука являются модель, размер экрана, ОС, Cd-плеер.
- возможных атрибутов мобильного типа модели, ОС.
- возможными атрибутами типа Tablet form являются модель, размер экрана, ОС.
Form_Attribute Таблица
form_id | attribute_id
----------------------
1 | 1
1 | 2
1 | 3
1 | 4
2 | 2
2 | 2
3 | 2
3 | 2
3 | 2
Я буду создайте HTML-форму, как показано ниже(с полями формы) в соответствии с выбором типа формы (ноутбук, мобильный телефон или планшет) пользователем из базы данных.
Для Ноутбука:
Для Мобильных Устройств:
Для Планшета:
Вопросы: Вот мои вопросы.
- какой подход лучше всего подходит для хранения данных, введенных пользователем в базу данных.
- Что лучше подход к извлечению данных из базы данных, потому что я хочу достичь опции фильтра, например : я хочу получить результат, который размер экрана ноутбука доступен от 14 до 16.
Фильтр:
Пожалуйста, предоставьте мне возможное решение с некоторым примером для лучшего понимания и помогите мне достичь этого.
2 ответа:
Я думаю, что вы можете пойти за столом, как
Form_Attribute_Values или Items
item_id | form_id | attribute_id | value ------------------------------------------------ 1 | 1 | 1 | SuperLap 1 | 1 | 2 | 15 1 | 1 | 3 | MS-DOS 6 1 | 1 | 4 | Toshiba
Таким образом, Вы сможете запрашивать один введенный элемент, а также фильтровать по форме, атрибуту или значению атрибута.
Вам Form_Attribute table будет очень удобно создавать форму для конкретной формы (например, когда пользователь хочет ввести ноутбук или мобильный телефон).
Таблица элементов будет местом, где вы будете хранить элементы после вставки или где вы будете искать опросите их.
Вы также можете добавить в конце столбец timestamp для хранения, когда элемент был сохранен, и столбец User_id, если ваши данные будут заполнены несколькими пользователями. И, возможно, дополнительный столбец для доступности тоже, если вы можете хранить элементы, недоступные в магазине, или вы можете сохранить доступность в отдельной таблице.
Запрос для ноутбука с screensize 14-16 будет выглядеть так, если вы можете получить форму и идентификатор атрибута из вашей формы фильтрации:
SELECT item_id, form_name, attribute_name, value INNER JOIN form ON item.form_id = form.form_id INNER JOIN attribute ON item.attribute_id = attribute.attribute_id WHERE item_id IN (-- here I select for Laptop and Screen Size dimension SELECT item_id FROM item WHERE form_id = 1 AND attribute_id = 2 AND item.value BETWEEN 14 and 16 )
В противном случае вы понадобится что-то чуть более сложное:
SELECT item_id FROM item INNER JOIN form ON item.form_id = form.form_id INNER JOIN attribute ON item.attribute_id = attribute.attribute_id WHERE item_id IN (-- here I select for Laptop and Screen Size dimension SELECT item_id FROM item WHERE form_id = (-- but first I need the form_id -- for Laptop SELECT form_id FROM form WHERE form_name = 'Laptop') AND attribute_id = (-- then I need the attribute_id -- for Screen Size SELECT attribute_id FROM attribute WHERE attribute_name = 'Screen Size') AND item.value BETWEEN 14 and 16 )
Предполагая, что ваши атрибуты растут для поля формы означает, что будет легко использовать формат данных JASON для хранения этой записи в нереляционной БД, как MongoDB. Затем вы можете легко запросить данные MongoDB Jason.
Если вы используете реляционную модель, это означает, что приведенный выше Ответ 1 лучше всего подходит.