ФорумПрограммированиеPHP для идиотов → Помогите со структурой БД

Помогите со структурой БД

  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 7 декабря 2007 г. 11:08

    Совсем голова не соображает. Никак не могу придумать как сделать следующее:
    есть основная таблица с прайсом (где-то 50 наименований) и есть таблица пользователей, которые имеют возможность этот самый прайс просматривать. Но каждому пользователю можно назначий использовать индивидуальный прайс со своими ценами.
    Так вот проблема в том, что не знаю как это лучше сделать. Очень уж не хочется создавать каждому пользователю свою таблицу с прайсом. Да и если появится какой-то новый лот в основном прайсе, его придется вручную лезть вбивать еще и тому пользователю.

    Подскажите как лучше сделать.
    PS. Вроде нормально написал суть проблемы :)
    from TRIAL with LOVE
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 7 декабря 2007 г. 11:28, спустя 20 минут 27 секунд

    а почему не сделать таблицу связки?
    price_id | user_id | value (binary(1))

    выбирать позицию прайса, если есть связка в этой таблице, где value=1
    я обычно так делаю
    все умрут, а я изумруд
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 7 декабря 2007 г. 12:15, спустя 46 минут 51 секунду

    Что-то не совсем догнал что ты имеешь ввиду.
    На пальцах объясни плиз )))
    Вот моя структура:
    id, model, price1, price2, price3

    Как это дело преспособить под то, как ты гвооришь?
    from TRIAL with LOVE
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 7 декабря 2007 г. 12:34, спустя 19 минут 32 секунды

    Прайс:
    id, model, price1, price2, price3

    Юзеры:
    id, name…

    Связка:
    id, user_id, price_id, value(ставится 0 если юзеру запрещено, 1 — разрешено смотреть пункт прайса с id=price_id)

    выбираем доступные прайсы
    SELECT P.*
    FROM `prices` AS P
    JOIN `relatives` AS R
    ON R.`price_id`=P.`id`
    WHERE R.`user_id`={$user_id} AND `value`=1
    все умрут, а я изумруд
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 7 декабря 2007 г. 12:50, спустя 16 минут 2 секунды

    Боюсь ты немножко не так меня понял.
    Пользователю доступен либо общий прайс, либо его личный, который 1 в 1 как общий но с другими ценами. Т.е. 1 юзер = 1 прайс.
    Но создавать эти прайсы с раными ценами для каждого очень не хочется. Это я в таблицах погрязну да и если надо что-то добавить новое это же надо все таблицы будет изменять, а это ппц полный.
    from TRIAL with LOVE
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 7 декабря 2007 г. 13:06, спустя 15 минут 10 секунд

    Что хранится в price1, price2, price3?
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 7 декабря 2007 г. 13:07, спустя 1 минуту 21 секунду

    непонятно
    все умрут, а я изумруд
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 7 декабря 2007 г. 13:26, спустя 18 минут 57 секунд

    хранятся цены, оптовая, розничная, рекомендованная, ну не важно, вобщем цены там, и вот эти самые цены могут быть для каждого юзера своими
    from TRIAL with LOVE
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 7 декабря 2007 г. 13:36, спустя 10 минут 32 секунды

    В таком случае, храни эти цены в таблице связок

    Модели:
    id, model

    Юзеры:
    id, name

    Связка:
    model_id, user_id, price1, price2, price3
    Составной уникальный индекс (model_id, user_id)
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 7 декабря 2007 г. 13:48, спустя 11 минут 45 секунд

    Пожалуй так и буду делать. Если общий прайс то ничего не заносим, усли уникальный, то буду все наименования заносить.
    Эх, грамоздкая конечно получится табличка но куда деваться. Правда делать всё это будет геморно я чувствую )))
    from TRIAL with LOVE
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 7 декабря 2007 г. 13:53, спустя 5 минут 1 секунду


    Если общий прайс то ничего не заносим, усли уникальный
    Если общий - то и заноси общие цены т.к. общий прайс это все равно наиболее распространенный частный случай.


    Эх, грамоздкая конечно получится табличка но куда деваться. Правда делать всё это будет геморно я чувствую )))
    Совершенно стандартная схема для реляционной БД, не вижу ничего гиморного и громозкого.
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 7 декабря 2007 г. 14:21, спустя 28 минут

    Я просто щас это так сделаю, что ничего стандартного уже не будет )))
    Да и зачем заносить общий случай, смысл засорять базу одними и теми же записями. Основной в одной таблице, дополнительные в другой.
    Вобщем уже придумал как сделать )))
    from TRIAL with LOVE
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 7 декабря 2007 г. 14:27, спустя 5 минут 36 секунд

    Да и зачем заносить общий случай, смысл засорять базу одними и теми же записями.
    Где ты увидел в предложенной схеме хоть одну пару одинаковых записей?


    Основной в одной таблице, дополнительные в другой.
    Хозяин-барин. :)
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 7 декабря 2007 г. 14:29, спустя 2 минуты 10 секунд

    У меня просто к решению любых проблем нестандартный индивидуальный подход :)
    Хотя мне кажется в данном случае мой вариант более экономичный :)
    from TRIAL with LOVE
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 7 декабря 2007 г. 14:46, спустя 17 минут 5 секунд


    Хотя мне кажется в данном случае мой вариант более экономичный :)
    Ага. Особенно сэкономит силы и время, когда нужно будет печатать прайсы, сравнивать цены, сортировать по ценам и.т.д .и.т.п. :)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!