В общем пишу диплом значит, естественно на php+mysql . В общем это база данных, можно так сказать. Есть таблица клиентов, в ней содержится общая инфа о них, типа имени, паспортных данных, адреса, и.т.п. первичный ключ-id клиента. Вопрос в следующем. У каждого клиента есть около 50 параметров, причем каждый из этих параметров является не обязательным, также система предполагает добавление новых параметров и удаление существующих. Как лучше хранить дополнительные данные в mysql, я не думаю, что создавать таблицу из 50 полей это лучший вариант. p.s. другие СУБД не хотелось бы изучать. Нужен ответ именно насчет MySQL
PHP: CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `test`; CREATE TABLE IF NOT EXISTS `clients` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ид клиента', `name` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'имя клиента', `password` VARCHAR( 40 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'пароль клиента', UNIQUE (`name`) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'клиенты'; INSERT INTO `clients` (`id`, `name`, `password`) VALUES (NULL, 'Вася', SHA1('123456')), (NULL, 'Петя', SHA1('qwerty')); CREATE TABLE IF NOT EXISTS `conf_list` ( `id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ид настройки', `name` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'имя настройки', UNIQUE (`name`) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'список настроек'; INSERT INTO `conf_list` (`id`, `name`) VALUES (NULL, 'passport'), (NULL, 'address'); CREATE TABLE IF NOT EXISTS `clients_conf` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ид для операций с записями', `id_client` INT UNSIGNED NOT NULL COMMENT 'ид клиента', `id_conf` INT UNSIGNED NOT NULL COMMENT 'ид настройки', `value` VARCHAR( 500 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'значение настройки' ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'соответствие настройка - клиент'; INSERT INTO `test`.`clients_conf` (`id`, `id_client`, `id_conf`, `value`) VALUES (NULL, '1', '1', '4004 213442'), (NULL, '1', '2', 'Ул. Ленина, дом 5, квартира стопицот '), (NULL, '2', '1', '4003 934867'), (NULL, '2', '2', 'без опреледённого места жительства');
Я думаю тебе стоит посмотреть в сторону EAV (Entity-attribute-value model). Не самая простая и оптимальная модель, но порою оправдывает себя Основной минус данной модели - уменьшение производительности засчет усложнения структуры (в общем приближении, не буду растекаться мыслью по древу). Но и плюсов море. Так же при кэшировании минус можно свести практически на нет. Все зависит от конкретной ситуации.