Лучший способ хранить большие объемы данных формы в PHP / MySQL? - PullRequest
2 голосов
/ 07 декабря 2011

Я делаю веб-приложение для клиента, которое является внутренней системой, позволяющей сотрудникам заполнять множество форм перед их началом.

Когда я получил формы, их много, например 25-30, и у меня возникают проблемы с выяснением того, как хранить данные для каждого из них в базе данных MySQL. Каждая из форм имеет разные требуемые данные и разные варианты выбора.

Первоначально я думал о том, чтобы иметь одну таблицу, а затем сериализовать выборки в столбец, а не сто столбцов. Я ничего такого не делал раньше и задавался вопросом, каким будет лучший способ сохранить данные?

Ответы [ 4 ]

2 голосов
/ 07 декабря 2011

Вы можете использовать магазин EAV, что-то вроде:

| form_name | employee_id | field_name | value |

Это не супер чисто, но вроде нормализовано, и вы сможете запросить его в том же духе. Если у вас возникнут проблемы с слишком большой таблицей, даже с индексами, вы можете разбить хранилище EAV на несколько таблиц, возможно, по имени-формы.

0 голосов
/ 07 декабря 2011

Если вы не заблокированы в MySQL, вы можете попробовать сделать это с MongoDB, так как он лучше подходит для таких задач, как эта.Если вы заперты, возможно, EAV - это то, что вам нужно.

0 голосов
/ 07 декабря 2011

Вы, вероятно, хотите по крайней мере три таблицы:

CREATE TABLE form_fields (
 id INT NOT NULL AUTO_INCREMENT,
 form_name VARCHAR(50),
 field_name VARCHAR(20),
 PRIMARY KEY  (`id`),
 UNIQUE KEY `real_pk` (`formname`,`fieldname`)
);

CREATE TABLE forms_completed (
 id INT NOT NULL AUTO_INCREMENT,
 form_name VARCHAR(20),
 ... other info about this instance of the form, 
         e.g. submitted date, submitted by...
 PRIMARY KEY  (`id`),
 FOREIGN KEY (form_name) REFERENCES form_fields(form_name)
                  ON DELETE CASCADE
);

CREATE TABLE form_values (
 id INT NOT NULL AUTO_INCREMENT,
 form_instance IN NOT NULL,
 form_name VARCHAR(50), /* only required to force referential integrity */
 field_name VARCHAR(20),
 date_value DATETIME,
 int_value INT,
 float_value FLOAT,
 string_value VARCHAR(100),
 PRIMARY KEY  (`id`),
 FOREIGN KEY (form_instance) REFERENCES forms_completed(id)
                  ON DELETE CASCADE,
 FOREIGN KEY (form_name, field_name) 
      REFERENCES form_fields(form_name, field_name)
                  ON DELETE CASCADE
);
0 голосов
/ 07 декабря 2011

Если вы используете эти данные для ведения записей, лучше использовать MS Excel.Или даже вы можете попробовать с MS Access в качестве альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...