Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

29.01.2010, 01:42
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Оптимизация в MySQL
В общем пишу диплом значит, естественно на php+mysql  . В общем это база данных, можно так сказать.
Есть таблица клиентов, в ней содержится общая инфа о них, типа имени, паспортных данных, адреса, и.т.п. первичный ключ-id клиента.
Вопрос в следующем. У каждого клиента есть около 50 параметров, причем каждый из этих параметров является не обязательным, также система предполагает добавление новых параметров и удаление существующих.
Как лучше хранить дополнительные данные в mysql, я не думаю, что создавать таблицу из 50 полей это лучший вариант.
p.s. другие СУБД не хотелось бы изучать. Нужен ответ именно насчет MySQL
|
|
|

29.01.2010, 02:00
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
Сообщение от ntldr
В общем пишу диплом значит, естественно на php+mysql  . В общем это база данных, можно так сказать.
Есть таблица клиентов, в ней содержится общая инфа о них, типа имени, паспортных данных, адреса, и.т.п. первичный ключ-id клиента.
Вопрос в следующем. У каждого клиента есть около 50 параметров, причем каждый из этих параметров является не обязательным, также система предполагает добавление новых параметров и удаление существующих.
Как лучше хранить дополнительные данные в mysql, я не думаю, что создавать таблицу из 50 полей это лучший вариант.
p.s. другие СУБД не хотелось бы изучать. Нужен ответ именно насчет MySQL
Хранить в одном поле через разделитель? оО
А как еще? Файлы....
|
|
|

29.01.2010, 02:36
|
|
Участник форума
Регистрация: 21.02.2008
Сообщений: 255
Провел на форуме: 975514
Репутация:
177
|
|
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', 'без опреледённого места жительства');
|
|
|

29.01.2010, 02:50
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Я думаю тебе стоит посмотреть в сторону EAV (Entity-attribute-value model).
Не самая простая и оптимальная модель, но порою оправдывает себя 
Основной минус данной модели - уменьшение производительности засчет усложнения структуры (в общем приближении, не буду растекаться мыслью по древу).
Но и плюсов море.
Так же при кэшировании минус можно свести практически на нет. Все зависит от конкретной ситуации.
|
|
|

29.01.2010, 02:56
|
|
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
Провел на форуме: 5321514
Репутация:
3313
|
|
Сообщение от m0Hze
Хранить в одном поле через разделитель? оО
А как еще? Файлы....
http://ru.wikipedia.org/wiki/Нормальная_форма
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|