Создание 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
  1. возможными атрибутами вида ноутбука являются модель, размер экрана, ОС, Cd-плеер.
  2. возможных атрибутов мобильного типа модели, ОС.
  3. возможными атрибутами типа 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-форму, как показано ниже(с полями формы) в соответствии с выбором типа формы (ноутбук, мобильный телефон или планшет) пользователем из базы данных.

Для Ноутбука:

Введите описание изображения здесь

Для Мобильных Устройств:

Введите описание изображения здесь

Для Планшета:

Введите описание изображения здесь

Вопросы: Вот мои вопросы.

  1. какой подход лучше всего подходит для хранения данных, введенных пользователем в базу данных.
  2. Что лучше подход к извлечению данных из базы данных, потому что я хочу достичь опции фильтра, например : я хочу получить результат, который размер экрана ноутбука доступен от 14 до 16.

Фильтр:

Введите описание изображения здесь

Пожалуйста, предоставьте мне возможное решение с некоторым примером для лучшего понимания и помогите мне достичь этого.

2 2

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 лучше всего подходит.