Проблема с разработкой структуры БД

bomzh

Новичок
Проблема с разработкой структуры БД

Есть предварительная структура базы отдельного модуля

# TABLE FORM_BLOCKS
DROP TABLE IF EXISTS #TBL_FORM_BLOCKS#;
CREATE TABLE #TBL_FORM_BLOCKS# (
fb_id mediumint(8) UNSIGNED NOT NULL auto_increment,
fb_enabled tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
fb_level tinyint(3) UNSIGNED DEFAULT '0' NOT NULL,
fb_to_male tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
fb_to_female tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
fb_to_orient tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
fb_name varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (fb_id),
KEY (fb_enabled),
KEY (fb_level),
KEY (fb_to_male),
KEY (fb_to_female),
KEY (fb_to_orient)
) TYPE = #V_DBTYPE# CHARACTER SET #V_DBCHST#;

# TABLE FORM_FIELDS
DROP TABLE IF EXISTS #TBL_FORM_FIELDS#;
CREATE TABLE #TBL_FORM_FIELDS# (
ff_id mediumint(8) UNSIGNED NOT NULL auto_increment,
ff_block mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
ff_order mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
ff_enabled tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
ff_type tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
ff_level tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
ff_required tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
ff_name varchar(255) DEFAULT '' NOT NULL,
ff_default varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (ff_id),
KEY (ff_block),
KEY (ff_order),
KEY (ff_enabled),
KEY (ff_type),
KEY (ff_level)
) TYPE = #V_DBTYPE# CHARACTER SET #V_DBCHST#;

Суть следующая:
1. Есть неопределенный набор полей, количество и качество которых задает администратор;
2. Каждое поле соответвует определенному блоку (группе полей);
3. Каждый пользователь должен заполнить в специальной форме поля, заданные администратором;

Помогите разработать метод хранения данных этих полей для каждого пользователя

Хотел сдеать таблицу для хранения данных вида:
# TABLE FORM_DATA
DROP TABLE IF EXISTS #TBL_FORM_DATA#;
CREATE TABLE #TBL_FORM_DATA# (
fd_user mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
fd_field mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
fd_data varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (fd_user),
KEY (fd_field)
) TYPE = #V_DBTYPE# CHARACTER SET #V_DBCHST#;

Где fd_user - идентификатор пользователя, fd_field - идентификатор поля, fd_data - непосредственно данные поля.
Но в таком случае при количестве полей 40, а пользователей 1000 таблица конкретно раздуется
 

Alexandre

PHPПенсионер
у меня была похожая задача, есть каталог, есть товары, есть доп поля, которые зависят от характеристик товаров, для каждого раздела каталога - определена отдельная группа характеристик, если это машины - то диаметр колес, мощность двигателя, кол-во посадочных мест, если это золотые изделия, то камень в каратах, вес в граммах, проба... и т.д.
Решение
Table Catalog: id, name
Table goods: id, cat_id, name, price.... - товары
Table property: id, cat_id, goods_id, name - характеристики товаров, отношение Catalog >- property -<goods
Table values: id, prop_id, goods_id , value: значения характеристик товаров, отношение property >- values-<goods
ну и еще к значениям была пристегнута табличка списковых характеристик, например, если значение могло иметь только несколько вариантов (color: red, metallic, colorado )
 
Сверху