За последние 24 часа нас посетили 17529 программистов и 1721 робот. Сейчас ищут 1867 программистов ...

Помогите советом?

Тема в разделе "PHP и базы данных", создана пользователем Artur2006, 31 янв 2010.

  1. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Всем доброго времени суток. Вот появился такой вопрос, подскажите пожалуйста кто сможет?
    Собираюсь создавать сам, если конечно терпения хватит, что то вроде системы заказов, пользователь составляет заказ из формы, отправляет, заказа заноситься в БД mysql, у заказа далее будет несколько статусов, ну например, оплачен, не оплачен, ожидает оплаты и в таком духе.

    Вопрос: :) как правильно спроектировать БД, чтобы потом проще было назначать определленный статус заказам? Не пойму, для каждого заказа необходимо делать отдельную таблицу, и по мере изменнеия статуса заказа, переписывать данные заказа из одной таблицы в другую. либо есть какой то другой способ?
    Всем заранее большое спасибо за ответ.
     
  2. Да, более правильный способ есть. Возможно, тут даже найдутся добровльцы, которые смогут это обьяснить достаточно коротким текстом. Возможно - прийдется самому читать книги по проектированию баз данных.
     
  3. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Artur2006
    Пиши всё в одной таблице. Я думаю, у тебя в основном все поля будут у всех заказов значимые, а разница будет лежать лишь на статусе. В большинстве случаев на этом всё заканчивается.
    Есть варианты делать, для каждого статуса свою таблицу, но запросы могут быть медленнее в таком случае, хотя частота блокировок может быть меньше. Конечно это зависит от того что твои статусы будут тебе давать, и как ты хочешь ими оперировать.
    Почитай про Table Inheritance (Single, Concrete и Class) а также про Inheritance Mappers. Эти шаблоны могут тебе помочь правильно подобрать структуру БД.
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ты спроектируй. писни сюда. тогда тебе укажут на ошибки, если они будут...
     
  5. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Можно немного подробнее, что значит значимые? Я вот думаю так. Если писать данные заказа в одну таблицу. встает вопрос. как средствами php назначать заказ? подскажите пожалуйста? :roll:
     
  6. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Да я вот думаю, как бы лучше начать. чтобы не переделывать?
     
  7. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    что значит назначить заказ? объясни.
    а ты пробный вариант кинь
     
  8. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    а где я так написал?
    нет еще пробного варианта, хочу сначала посоветоваться, а потом уже пробовать :)
     
  9. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Вспе ясно, я та понял. нужн овсе пробовать на конкретном примере. ну скоо покажу, если что то получиться? Всем спасибо, если вы можете еще что то добавить, с радостью выслушаю.
     
  10. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    однозначно если ничего вообще не делать, ничего и не будет вообще
     
  11. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  12. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    если найдешь такой вариант, расскажешь потом?)
     
  13. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Ну не, думал думал, а как все же начать, так и не додумался, ну подскажите пожалуйста, делать отдельные таблицы для каждого статуса. или как можно по дргугому средствами php назначать статус для данных заказа?
     
  14. Darevill

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

    С нами с:
    20 сен 2009
    Сообщения:
    50
    Симпатии:
    0
    Таблица заказов содержит данные о заказе и поле "status", в котором указан id статуса.
    Статусы хранятся в другой таблице, в которой минимум id и имя статуса.
    При выборке заказов используешь JOIN.
    При смене статуса у заказа делаешь UPDATE поля "status".
     
  15. Мило в теории, но на практике не работает.

    Кстати, я люблю этот пример давать как раз, что бы теоретиков от практиков отличать.

    Немного подумав, можно понять, почему это не работает на практике.
     
  16. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Подскажите тогда более реальный пример, хотя выше предложенный я так понимаю, выглядит нормально, но почему не работает, хотелось бы узнать? Если не трудно, расскажите пожалуйста?
     
  17. В целом, пример правильный. Но поработав с магазином, выясняется, что под "сменой статуса заказа" часто оказывается смена адреса доставки, например. А это плохо впихивается целочисленные идентификаторы как таковые.

    Однако самой большой ошибкой оказывается, когда в поле заказа пихают артикул (ид) товара - тогда у клиента все шансы получить товар не по той цене, по которой он покупал, а по той, которая была на момент отгрузки со склада.
     
  18. Darevill

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

    С нами с:
    20 сен 2009
    Сообщения:
    50
    Симпатии:
    0
    Пример использовался на практике. И использовали его только для указания состояния заказа - покупатель мог залогиниться в магазин и посмотреть на какой стадии обработка его заказа, а варианты вроде "смена адреса доставки" думаю разумнее решать по телефону
     
  19. лол. я работал с инет магазином, где 15 человек курьеров и 3 склада. КАК они узнают, что сменился адрес доставки?
     
  20. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Народ, а может кто за деньги сделает тз есть, но мне бы хотя бы часть того, что там, самые главные функции реализовать, некоторые пока можно опустить. Скажите, кто за сколько возметься? вот тз http://slil.ru/28581009 Ну это я так. может у кого появиться желание поработать для души, ну не бесплатно конечно.
    А то у меня за эти дни голова распухла, от думак. плохо, когда хочешь сделать, но не знаешь, с какой стороны вообще к этому подойти. :(
     
  21. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Смена статуса заказа - это именно смена статуса (не оплачен, оплачен, отгружен, в пути, принят, отменен)

    Если вдруг в заказе меняется цена, адрес, а не дай бог клиент или товар. Это новый заказ.

    Омг, и как ты решил этот вопрос? Курьер взял пицу и поехал. Он еще не доехал, но в заказе пица изменилась на торт, да и адрес стал другим. И чего делать?
     
  22. Darevill

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

    С нами с:
    20 сен 2009
    Сообщения:
    50
    Симпатии:
    0
    это не имеет никакого отношения к "статусу заказа"
     
  23. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Не, ну вот, создатель темы отдыхает в углу, наблюдая прения сторон, а стороны как обычно разделились на разные фронты. Забыли про меня? :)
     
  24. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Artur2006
    блин не пакуй тз в док файл.

    Upd: Мда, ТЗ написано сумбурно, но с размахом. От 2 до 4 недель работы.
    Причем безоператорную интеграцию внутренней платежной системы с Банк и Почтовый перевод я вообще представляю себе крайне смутно (нет, в сделать это можно, но весьма недешево.)
     
  25. Artur2006

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

    С нами с:
    23 июн 2009
    Сообщения:
    66
    Симпатии:
    0
    Я ж чайник. можно так сказать. :) а в че нужно паковать тогда?