За последние 24 часа нас посетили 17479 программистов и 1711 роботов. Сейчас ищут 1660 программистов ...

Какую выбрать структуру БД

Тема в разделе "PHP для новичков", создана пользователем tarabukinivan, 13 янв 2018.

  1. tarabukinivan

    tarabukinivan Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    21
    Симпатии:
    0
    Доброе утро!
    Есть сайт технической поддержки. И есть пользователи, которые оставляют на нем заявку в компанию. На нем есть таблица с полями: id_client(id пользователя AI, PK), name_client(Имя потльзователя), status(статус - наверное лучше сделать автоинкремент), date_r(дата регистрации).

    Статусы у всех пользователей будут разные. Например:
    у пользователя 1: открыто, отменено, закрыто, передано, принято.
    у пользователя 2: открыто, отменено, закрыто, исполнено, в ожидании.

    Статусы в любое время могут добавляться( не удаляются).
    Я сделал так:
    Вторая таблица такая: id_status, id_client, open, close, cancelled, sent, accepted.
    id_status - AI PK, id_client - указывает на первую таблицу на пользователя, другие поля сами статусы и имеют значение enum: '0', '1' - в зависимости присутствует для пользователя ставиться 0 или 1.

    Когда необходимо добавлять статус какому либо клиенту сначала ставлю 1 для нужного пользователя, а для всех других проставляю 0.

    Может можно реализовать попроще?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Связь "статус" - "пользователь" называется один-ко-многим (один статус может быть у многих пользователей). Поэтому делается отдельно таблица statuses (id, status_name), а в таблице пользователей просто целое поле status_id, и всё, не нужно ничего обнулять и т.п. Ставишь нужный status_id и радуешься
    --- Добавлено ---
    http://habrahabr.ru/post/193136/, http://habrahabr.ru/post/193284/, https://habrahabr.ru/post/193380/ - вот, прочитай для начала, какие вообще бывают связи
     
    MouseZver и artoodetoo нравится это.
  3. tarabukinivan

    tarabukinivan Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    21
    Симпатии:
    0
    Вы имеете виду в таблице пользователей в поле status_id хранить несколько значений id из таблицы statuses разделенных разделителями или как?
     
  4. tarabukinivan

    tarabukinivan Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    21
    Симпатии:
    0
    У каждого клиента должны быть видны несколько статусов для выбора (только ему принадлежащие), а у другого клиента (другие статусы, принадлежащие именно ко второму клиенту)
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Этого в первом посте не было. ОК, тогда связь называется "многие-ко-многим" и делается через промежуточную таблицу. В ссылках на хабр, которые я дал, она тоже описана.
     
  6. tarabukinivan

    tarabukinivan Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    21
    Симпатии:
    0
    Ок спасибо! Только на хабре написано объяснение. Я сам как бы представляю как она выглядит. Я спрашиваю реализацию на php. Какие таблицы будут у столбцов и их связь.
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ну там написано достаточно, чтобы сообразить самому. Промежуточная таблица с полями user_id, status_id. Соответственно, сколько статусов у пользователя - столько записей про него в этой таблице.
     
  8. tarabukinivan

    tarabukinivan Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    21
    Симпатии:
    0
    Ок спасибо mkramer!