За последние 24 часа нас посетили 51850 программистов и 1725 роботов. Сейчас ищут 810 программистов ...

Как правильно организовать хранение заказов в интернет-магаз

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

  1. battrack

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

    С нами с:
    17 фев 2009
    Сообщения:
    16
    Симпатии:
    0
    При разработке интернет-магазина пришел к такому вопросу:
    есть база товаров. Условно назовем их "товар1", "товар2", "товар3" и т.д. В базе хранятся данные о каждом товаре, включая уникальный идентификатор (все как у всех). Есть база данных заказов пользователей (номер заказа, данные о заказчике, данные о доставке, оплате и т.д.). И есть база заказанных товаров, в которой связывается наименование товара (из каталога) с номером заказа к которому он относится. Все это вроде как на поверхности, и вряд ли нужно делать по-другому (хотя, я, конечно, могу и ошибаться). А вопрос вот в чем! В базе заказанных товаров что правильнее хранить: наименования товаров или их идентификаторы??? Сначала я пришел к выводу, что нужно хранить именно названия товаров , а не их идентификаторы. Я пришел к такому выводу так как представил себе такую схему: в базе заказанных товаров хранятся, например, id этих товаров. Тогда при выводе, например, в системе управления заказами, списка заказов и товаров, связанных с ними, скрипт будет извлекать из таблицы заказанных товаров их идентификаторы и по этим идентификаторам уже брать названия товаров из таблицы товаров (из каталога). Все, казалось, бы хорошо. Но вдруг администратор сайта удаляет какое-то наименование товара. А этот товар есть в чьем-то заказе. Тогда получается когда скрипт будет искать в таблице товаров товар с таким id (а он удален), то возникнет ошибка. Понятно, что, может быть удаление товаров - это не такая частая процедура. Но тем не менее, если товар удален, то id такого больше не существует. Значит в заказе (если когда то до удаления данного заказа был заказ с данным товаром) будет храниться несуществующий id, а значит несуществующий товар.
    Поэтому то я и решил в заказах хранить не id товаров а их имена. Тогда, как бы мы не чистили, каталог, информация о заказанных товарах останется навсегда. Т.е. чтобы избежать связи таблицы заказанных товаров и таблицы товаров (каталога). И если нужно вывести список заказов и заказанных в них товарах - проблем не будет.
    Но меня все равно постоянно гложит этот момент, т.к. осознаю, что неправильно хранить в заказах название товара. Я думал, может быть не давать пользователю удалять те товары из каталога, на которые уже когда-либо были оформлены заказы, но это тоже как-то не правильно...
    Может кто подскажет как правильно организовать хранение заказов и наименований заказанных товаров, чтобы не происходило конфликтов при правке каталога товаров.