1. SQL / Говнокод #4205

    −128

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    CREATE TABLE IF NOT EXISTS `ls_user` (
      `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `user_login` varchar(30) NOT NULL,
      `user_password` varchar(50) NOT NULL,
      `user_mail` varchar(50) NOT NULL,
      `user_skill` float(9,3) unsigned NOT NULL DEFAULT '0.000',
      `user_date_register` datetime NOT NULL,
      `user_date_activate` datetime DEFAULT NULL,
      `user_date_comment_last` datetime DEFAULT NULL,
      `user_ip_register` varchar(20) NOT NULL,
      `user_rating` float(9,3) NOT NULL DEFAULT '0.000',
      `user_count_vote` int(11) unsigned NOT NULL DEFAULT '0',
      `user_activate` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `user_activate_key` varchar(32) DEFAULT NULL,
      `user_profile_name` varchar(50) DEFAULT NULL,
      `user_profile_sex` enum('man','woman','other') NOT NULL DEFAULT 'other',
      `user_profile_country` varchar(30) DEFAULT NULL,
      `user_profile_region` varchar(30) DEFAULT NULL,
      `user_profile_city` varchar(30) DEFAULT NULL,
      `user_profile_birthday` datetime DEFAULT NULL,
      `user_profile_site` varchar(200) DEFAULT NULL,
      `user_profile_site_name` varchar(50) DEFAULT NULL,
      `user_profile_icq` bigint(20) unsigned DEFAULT NULL,
      `user_profile_about` text,
      `user_profile_date` datetime DEFAULT NULL,
      `user_profile_avatar` varchar(250) DEFAULT NULL,
      `user_profile_foto` varchar(250) DEFAULT NULL,
      `user_settings_notice_new_topic` tinyint(1) NOT NULL DEFAULT '1',
      `user_settings_notice_new_comment` tinyint(1) NOT NULL DEFAULT '1',
      `user_settings_notice_new_talk` tinyint(1) NOT NULL DEFAULT '1',
      `user_settings_notice_reply_comment` tinyint(1) NOT NULL DEFAULT '1',
      `user_settings_notice_new_friend` tinyint(1) NOT NULL DEFAULT '1',
      PRIMARY KEY (`user_id`),
      UNIQUE KEY `user_login` (`user_login`),
      UNIQUE KEY `user_mail` (`user_mail`),
      KEY `user_activate_key` (`user_activate_key`),
      KEY `user_activate` (`user_activate`),
      KEY `user_rating` (`user_rating`),
      KEY `user_profile_sex` (`user_profile_sex`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    [/code]
    очень актуально смотрится эта таблица с приведённой выше. очень умно сделать таблицу "топик-стартер" и не выделить отдельно профиль пользователя. что чаще используется в выборке? =)
    про миллионы пользователей и лайвстрит - не смешите, не верю (с)
    загнётся до прихода в БД

    дополнение к http://govnokod.ru/4203
    выделил отдельным гауно-кодом из-за того, что комично смотрится вместе с указанной выше таблицей. ну и ограничение длины комментов есть. ярые искатели оптимизаций видимо идут мимо. очень актуально смотрится эта таблица с приведённой выше. очень умно сделать таблицу админов в один колумн и не выделить отдельно профиль пользователя. что чаще используется в выборке? =)

    Запостил: hybroid, 09 Сентября 2010

    Комментарии (18) RSS

    • сори, в конце Сtrl+X попутал с Ctrl+C ): дико извиняюсь
      Ответить
      • ну есть пару лишних полей (user_date_comment_last например), но не сказал бы что говно
        Ответить
        • смысл говна в сопоставлении с урлом.. урл на второй кусок говна приведён в описании
          Ответить
    • hybroid, ты такой гавнокод-сёрчер... =\
      Ответить
    • Судя по тому, что user_id — uint, рассчитывают они на миллиарды пользователей.
      Ответить
    • >>enum('man','woman','other')
      Ответить
      • other - гермафродиты, транссексуалы и трансвеститы. и еще трансгендеры
        Ответить
      • DEFAULT 'other' причем
        Ответить
      • встречал я где-то RFC (подозреваю, что это что-то из бест-практис) в котором было написано, что гендеров должно быть пять. что-то вроде
        - male
        - female
        - other
        - unknown
        - not applicable
        Ответить
        • линк? очень интересно посмотреть первое апреля какого года :-D
          Ответить
    • непонятно, чего заминусовали. 30 колонок для одной таблицы это многовато, уже надо оптимизацию проводить... до какой нить 3НФ
      Ответить
    • тащемто говно-то вот где:
      `user_profile_country` varchar(30) DEFAULT NULL,
        `user_profile_region` varchar(30) DEFAULT NULL,
        `user_profile_city` varchar(30) DEFAULT NULL,


      про справочники мы не знаем. А потом будут города типа "С.Петербург', "Петербург", "Питер" и "СПБ".
      А еще запрос "вывести всех в моем городе" будет делать поиск по varchar(30).
      Ну и денормализация еще
      Ответить
    • судя по голосам за код - многие считают нормальной практикой делать таблицу пользователей с таким количеством колумнов? таблицу, джойны с которой гуляют в каждом втором запросе и нужны лишь логины да айдишники.
      мне почему-то эта таблица кажется рывком в PHP-Nuke какой-то
      Ответить
      • не боитесь. Вот когда хомячки сделают в этой таблице поле BLOB и начнут там хранить фотографии, продолжая делать SELECT * в любом джойне с этой таблицей -- вот тогда Вы взвоете
        Ответить
        • беда не только в SELECT *, еще фото в BLOB чревато "Got a packet bigger than 'max_allowed_packet' bytes"
          Ответить
        • вышеприведённый код можно считать и шагом к вашему примеру. это страшно. я уже боюсь. я чувствую будущее, как Нострадамус =)
          Ответить
      • Ну таки и в чем проблема? Да хоть 100 полей, какая разница?
        Ну гуляют джойны, и что от количества полей меняется? Нужны только логины - так их и возьмем.
        Или закладываться на указанное Lure Of Chaos "select *" ? Ну это уже будет говнокод в том селекте, но никак не в самой таблице.

        А если, блин, муСКЛ внутри себя при джойне в промежуточную таблицу тащит все поля (а не только то что нужно) - то это проблемы мускла. Которые конечно нужно учитывать, но это все равно не делает говном эту таблицу.

        Вот что по полям а-ля "user_profile_country" справочник сделать - еще можно согласиться, но ведь как я понял заговняли-то не из-за этого.
        Ответить
    • автор сам не понял о чем пытался сказать... сколько всего нормальных форм мы знаем?
      Ответить

    Добавить комментарий