Структура таблицы в mysql базе (php)

Discussion in 'PHP' started by serg-php, 20 Aug 2011.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Есть таблица пользвателей для самописного двига

    Code:
    	CREATE TABLE IF NOT EXISTS `bb_user` (
    	  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    	  `email` varchar(60) NOT NULL DEFAULT '',
    	  `username` varchar(60) NOT NULL DEFAULT '',
    	  `pwd` varchar(32) NOT NULL,
    	  `disabled` tinyint(3) unsigned NOT NULL DEFAULT '0',
    	  `en_exp_modify` tinyint(3) unsigned NOT NULL DEFAULT '0',
    	  `bb_sid` varchar(32) NOT NULL DEFAULT '',
    	  `bb_ads_max` smallint(5) unsigned NOT NULL DEFAULT '0',
    	  `free_ad_used` tinyint(3) unsigned NOT NULL DEFAULT '0',
    	  `lastlogin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    	  `lastlogin_ip` varchar(255) NOT NULL DEFAULT '',
    	  `lastlogin_failure` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    	  `lastlogin_token` varchar(32) NOT NULL DEFAULT '',
    	  `regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    	  `reg_ip` varchar(30) NOT NULL DEFAULT '',
    	  `exp_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    	  `txn_id` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_1` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_2` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_3` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_4` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_5` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_6` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_7` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_9` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_10` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_11` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_12` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_13` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_14` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_15` varchar(255) NOT NULL DEFAULT '',
    	  `bb_status` text NOT NULL,
    	  `images` text NOT NULL,
    	  `bb_ml_list` varchar(255) NOT NULL DEFAULT '',
    	  `bb_af_id` smallint(5) unsigned NOT NULL DEFAULT '0',
    	  `bb_credits` decimal(9,2) NOT NULL DEFAULT '0.00',
    	  `bb_credits_use` char(1) NOT NULL DEFAULT '',
    	  `bb_scart_userinfo` text NOT NULL,
    	  `bb_scart_shipid` varchar(100) NOT NULL DEFAULT '',
    	  `bb_177_16` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_8` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_17` varchar(255) NOT NULL DEFAULT '',
    	  `bb_177_18` varchar(255) NOT NULL,
    	  `bb_177_19` varchar(255) NOT NULL,
    	  `bb_opts` text NOT NULL,
    	  `bb_177_20` varchar(255) NOT NULL,
    	  `id_host` int(3) NOT NULL,
    	  `bb_remind` smallint(5) NOT NULL DEFAULT '-1',
    	  `bb_region_id` smallint(5) unsigned NOT NULL,
    	  `bb_pribb_msg_notify` char(1) NOT NULL,
    	  `bb_pribb_msg_reply` char(1) NOT NULL,
    	  `bb_pribb_msg_boxsize` mediumint(8) unsigned NOT NULL,
    	  `int_1` int(11) NOT NULL,
    	  `site_active` int(3) NOT NULL,
    	  PRIMARY KEY (`id`),
    	  UNIQUE KEY `email` (`email`),
    	  UNIQUE KEY `username` (`username`),
    	  KEY `bb_af_id` (`bb_af_id`)
    	) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ;
    Работа двига организована так, что к этой таблице пользователей идет обращение с 30 сайтов, где
    один и тот же пользователь может иметь несколько разных статусов с различным времением их истечения,
    пришла мысль о создании для каждого сайта (хоста) отдельного поля статуса. Таким образом, добавляется
    30 полей `bb_status_1` text NOT NULL, `bb_status_2` text NOT NULL, и т.д.

    1. Насколько такая структура таблицы скажется на производительности?
    2. Каковы варианты организовать структуру таблицы пользователей по-другому, если для статуса bb_status должен соответствовать
    отдельный хост (сайт)?
     
  2. 4upakabr0

    4upakabr0 Member

    Joined:
    14 May 2008
    Messages:
    124
    Likes Received:
    23
    Reputations:
    0
    Не надо 30 полей. Лучше сделать 2 поля: сайт и статус. Заиметь 30 записей. Во-первых, это будет без лишней избыточности. Во-вторых, гибко - ты можешь добавить запись с другим сайтом и статус.
    А вообще почитай вику о нормальной форме таблиц .
     
  3. PATCH

    PATCH Member

    Joined:
    16 Jul 2011
    Messages:
    38
    Likes Received:
    5
    Reputations:
    11
    не правильно советуеш) если ты имееш в виду в эту таблицу вместо 30 сайтов влепить 2 столбца сайт и статус то это тоже будет не верно ибо у него это таблица авторизации)

    как вариант создать новую таблицу с полями user_id или user_login который мы берем либо из сессии либо с таблицы users а так же те самые 2 поля которые советовал 4upakabr0 т.е структура будет примерно

    user_id , site, status для экономия места user_id естествено числовой, status естествено может быть тоже числовой как двоичный код 0 - оффлайн 1 онлайн
    а за site можно брать varchar (40) а за отслеживание какой имено сайт можно использовать функцию $_SERVER['HTTP_HOST']
     
  4. 4upakabr0

    4upakabr0 Member

    Joined:
    14 May 2008
    Messages:
    124
    Likes Received:
    23
    Reputations:
    0
    Создай 2 таблицы. Первая STATUS с полями:
    Code:
    user_id | site_id | status
    Сделай справочник сайтов с двумя полями и 30-ю записями, назви SITES, поля:
    Code:
    id | name_of_site 
    Сначала забираешь
    Code:
    $site_id=select form SITES id where name_of_site=$_SERVER['HTTP_HOST']
    потом чекаешь таблицу STATUS:
    Code:
    $status=select from STATUS status where site_id=$site_id and where $user_id=$user_id
     
  5. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    PATCH,4upakabr0,

    Благодарю за помощь!

    Небольшое уточнение - статус пользователя непостоянный, следоватеьльно, нужно будет создать поля: время присвоения статуса, время истечения статуса.

    Еще одно обстоятелство - я хотел решить проблему с минимальными изменениями в скрипте. Скрипт изначально был для одного хоста.

    Вижу, что без отдельной таблицы не обойтись.
     
  6. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    какой ужас...
     
  7. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Что именно?


    Небольшое уточнение:
    - в таблице 50.000 пользователей, если кол-во сайтов равно 30,
    то записей в таблице должно быть 1 500 000
     
    #7 serg-php, 20 Aug 2011
    Last edited: 23 Aug 2011
  8. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Да уж!
     
Loading...
Similar Threads - Структура таблицы mysql
  1. GAiN
    Replies:
    3
    Views:
    7,433