Помогите правильно составить таблицу базы данных

Тема в разделе "Как сделать...", создана пользователем SocMaster, 2 дек 2014.

  1. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Есть вот такая форма [​IMG] (намного больше)
    И возник вопрос. как лучше хранить данные в бд? всего 12 полей. чекбоксы можно комбинировать
    не знаю, какой тип полей выбрать в бд, как лучше всего хранить данные
     
  2. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    380
    Симпатии:
    236
    тип TINYINT(1)
    И там хранить 1, 2, 3 и так далее

    Например:
    1 - Виден всем
    2 - Только друзьям
    3 - Только мне
     
    latteo и Шумадан нравится это.
  3. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.725
    Симпатии:
    2.100
    для этого случая достаточно 4 полей, чекбоксы можно хранить в виде битовых масок типа 100 (можно привести к инту)
    1 - всплывающие уведомления на сайте
    0 - по электронной почте
    0 - по смс

    для приватности вообще достаточно минимального поля 0 - виден только мне, 1 - только друзьям, 2 - всем

    почему 0, потому как народ всегда втыкает туда что-то писать, а если по дефолту ставить 0 - то больше вероятности, что при халявном программировании туда не попадёт настройка типа показать всем
     
    latteo нравится это.
  4. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Я тоже так думал, а вытягивать данные через explode?
     
  5. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.725
    Симпатии:
    2.100
    в даном случае никакого explode, у вас для приватности отдельное поле - privacy TINYINT(1) unsigned
     
  6. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Приватность это понятно, там только один вариант возможен. а вот чекбоксы
     
  7. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    380
    Симпатии:
    236
    Для каждого чекбокса сделайте отдельную колонку, и будет Вам счастье
     
    Шумадан нравится это.
  8. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.725
    Симпатии:
    2.100
    я уже написал, что там можно использовать 100 например

    так тоже очень ок, правда полей может быть 100500
     
  9. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Да, полей будет слишком много. если для каждого чекбокса

    А такой вид хранения плохой?
    {"site":"1","email":"1","sms":"1"}
    т.е например чекбоксы
    personal_message[site]
    personal_message[emaill]
    personal_message[sms]
    ну и поле в бд personal_message
     
    Последнее редактирование модератором: 2 дек 2014
    Q_BASIC нравится это.
  10. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.450
    Симпатии:
    1.244
    Если тебе потребуется выдернуть только те объявления, которые имеют отмеченный чекбокс site и не отмеченный sms придётся юзать поиск по текстовому полю, что работает значительно медленнее проверки полей TINYINT или битовых масок или даже математических операций.

    Если думаешь, что справишься - делай битовые маски - это наиболее производительный способ для высоконагруженных приложений, но может быть сложным в реализации, если не знаком с концепцией.
    В противном случае делай 100500 полей по количеству чекбоксов и не парься, что их слишком много, придёт время отрефакторишь.
     
    SocMaster и Шумадан нравится это.