В поисках масштабируемой, гибкой и быстрой базы данных для веб-сайта в стиле «Создайте свою собственную форму» - например, Wufoo .
Правила:
- У пользователя есть только 1 форма, которую он может построить
- Пользователь может создавать свои собственные поля или выбирать из «стандартных» полей
- Форма пользователя 1 имеет столько полей, сколько хочет пользователь
- Значения могут быть родственными значениями другого значения E.g. Значение фотографии может иметь имя, местоположение, ширину и высоту в качестве значений одноуровневого элемента
Специальные правила:
- Пользователь может отправить свою форму максимум 5 раз в день
- Дата значения важна
- Очень важна гибкость отчета о значениях (для одного пользователя, для всех пользователей, 1 поле, много полей) - визуализация данных (большинство из них будут основаны на хронологии, например, все фотографии за июль 2009 г. для всех пользователей).
Таблица "пользователи"
UID
Таблица "field_user" - назначить поле для формы пользователя
шлагты
UID
weight - int - используется для заказа полей в форме пользователя
Таблица "Поля"
шлагты
creator_uid - int - поле 'создатель'
этикетка - varchar - например, E-mail
value_type - varchar - используется для определения того, какое поле в таблице «значений» будет заполнено (например, если «int», то значения этого поля будут передавать данные в поле values.type_int - и все остальные поля .type_x будут быть NULL).
field_type - varchar - например, «электронная почта» - используется для особых условий, например, правила проверки
Таблица "значений"
VID
parent_vid
шлагты
UID
дата - дата
date_group - int - значение 1-5 (пользователь может отправлять не более 5 форм в день)
type_varchar - varchar
type_text - text
type_int - int
type_float - float
type_bool - bool
type_date - date
type_timestamp - отметка времени
Я понимаю, что этот подход будет означать, что записи в таблице 'Value' будут содержать только 1 часть данных с другими полями .type_x, содержащими NULL ... но, насколько я понимаю, этот дизайн будет «самым быстрым» решением (меньше запросов , меньше таблиц соединения)