Squeak.ru - шаблоны программирования

создание базы данных для моего сайта

Мне нужна помощь в разработке базы данных для моего интернет-магазина индивидуальных костюмов. До сих пор я создал таблицы для продуктов, заказов и моих пользователей/клиентов. Я думаю, мне нужно добавить несколько таблиц, чтобы управлять моей корзиной для клиентов, пока они делают свой выбор и настраивают его. На данный момент я немного смущен тем, как действовать дальше. должна ли моя корзина для покупок содержать всю информацию, которую в конечном итоге будут хранить мои таблицы заказов? как вы можете видеть из прикрепленного изображения, в заказах есть элементы заказа, а в элементах заказа есть варианты элементов заказа. Таким образом, я могу получить каждый элемент заказа, который хочет клиент, и все настройки, связанные с каждым конкретным заказом. Нужно ли это сначала сделать в моей корзине, а это означает, что мне в основном придется реплицировать все таблицы в разделе заказов базы данных, или есть лучший способ? Кроме того, чего еще не хватает моему приложению базы данных для надежной работы веб-сайта, такого как www.indochino.com?

Приветствуется любая помощь... введите здесь описание изображения


Ответы:


1

Вы должны изменить свою таблицу order на таблицу shopping_cart и удалить из нее всю информацию об адресе доставки.

Затем создайте отдельную таблицу order, содержащую shopping_cart_id, указывающую на соответствующую корзину покупок. Эта order таблица должна включать всю необходимую информацию для размещенного заказа, такую ​​как адрес доставки, общую сумму позиции, сумму налога, общую сумму заказа, дату размещения и время и т. д.

Я не думаю, что поле статуса является правильным подходом, потому что корзина — это не заказ, а многие поля заказа неприменимы к корзине. Это поля, которые не должны принимать пустое значение, поскольку они необходимы для выполнения заказа. Таблицы, которые хранят совершенно разные вещи в зависимости от поля состояния, являются бременем, когда приходит время писать отчеты по этим данным.

07.03.2011
  • это вопрос перспективы. один из способов взглянуть на это состоит в том, что корзина представляет собой еще не выполненный заказ. это не совсем разные вещи. они содержат большую часть одной и той же информации. на самом деле отличается только состояние заказа. и я думаю, что ваше утверждение о том, что поля по порядку не должны принимать нулевое значение, ошибочно. нет ничего плохого в наличии пустых/нулевых полей в таблице заказов. если вы хотите сообщить о выполненных заказах, это действительно так же просто, как область запроса, где статус = «завершено» или что-то еще. 08.03.2011
  • @Josh Deeden - Ваш подход либо (1) усложняет создание ограничений целостности данных, либо (2) избегает использования соответствующих ограничений целостности данных. Я знаю, что есть класс разработчиков, которые не видят ценности ограничений БД, но мой опыт показал, что они чрезвычайно ценны при создании пуленепробиваемых систем. Сведение к минимуму неприменимых нулей и магических морфинговых таблиц — это два способа проектирования систем с хорошими ограничениями. 08.03.2011
  • Думаю, если вам нравится дублирование кода и данных, то ваш подход, вероятно, правильный. Однако, если вы предпочитаете СУХОСТЬ и делать вещи не более сложными, чем необходимо, то я думаю, что мой подход выигрывает день. Сведение к минимуму неприменимых нулей за счет введения дублирования кажется немного анальным и довольно непрактичным. 08.03.2011
  • Я думаю, что единственное, что я могу предложить человеку, который задал вопрос, это посмотреть, как другие, хорошо разработанные решения для электронной коммерции решают проблему. Сравните и сопоставьте и найдите решение, которое соответствует вашим собственным ощущениям. 08.03.2011
  • Встраивание ограничений в структуру данных, а не прикрепление их к структуре, которая не моделирует факты реального мира, уменьшает, а не расширяет сложности. И хотя это может показаться излишним, проверка данных всех границ слоев в системе является хорошей практикой, которая сводит к минимуму ошибки и обеспечивает лучшее разделение проблем. 08.03.2011
  • Это более гибкий дизайн, особенно если вы хотите, чтобы пользователь мог сохранять элементы корзины покупок, не превращая их в заказ прямо сейчас, как это делает Amazon. В отдельных таблицах я могу положить все в корзину, а затем выбрать столько, сколько я хочу заплатить прямо сейчас для фактического заказа. но эти другие вещи могут остаться в корзине, чтобы мне не пришлось искать их в следующий раз, когда я пойду заказывать. 08.03.2011
  • Это все очень интересные перспективы, которые я не рассматривал. Я многому учусь из этих ответов. @josh, ты сказал, что подход Джеффри вызовет дублирование данных, и я не уверен, где именно. могли бы вы объяснить. Кроме того, вы сказали посмотреть на другие решения для электронной коммерции, не могли бы вы указать мне правильное направление. У меня есть схема решения для os-commerce, и она совсем не проста. Я не знаю, понимаю ли я, но похоже, что они дублируют много данных. В связи с этим, не лучше ли мне просто использовать некоторые уже существующие решения и настроить их? 08.03.2011
  • @jeffery, поэтому, если бы я использовал ваше решение, моя таблица заказов выглядела бы так: Orders -order_id pk, user_id FK, cart_id FK , адрес, город, штат, почтовый индекс, дата создания 08.03.2011
  • @ Guided33 - Мое решение не связано с дублированием данных (что является самым большим грехом, который можно совершить при проектировании базы данных!). Дублирование кода происходит, когда проверки целостности появляются как на уровне бизнес-логики, так и на уровне базы данных. Однако это не очень большая проблема, потому что два слоя обрабатывают данные совершенно по-разному, поэтому проверки на самом деле будут очень разными. Ограничения базы данных также важны, потому что они предотвращают ошибки из других источников, помимо приложения, и потому что ошибки данных в работающей системе исправить намного сложнее, чем программировать... 08.03.2011
  • (продолжение) ошибок, поэтому целесообразно несколько проверок. Дизайн вашей таблицы мне кажется правильным. 08.03.2011

  • 2

    Я не думаю, что вам нужен отдельный стол для корзины. Я бы просто использовал существующие таблицы order/order_item для хранения информации о корзине покупок, а затем добавил бы поле статуса в заказе, содержащее такие значения, как «незавершенный», «завершенный», «отправленный» и т. д. Любые незавершенные заказы отображается как корзина. Конечный автомат был бы хорошим кандидатом для управления жизненным циклом заказа, ИМХО.

    07.03.2011
  • отличная идея, если бы я это сделал, мне нужно было бы создать отдельную таблицу для значений статуса? 08.03.2011
  • @Guided33. При таком дизайне поле статуса обычно находится в таблице заказов. В качестве альтернативы post_date со значением null может неявно использоваться для указания незавершенного заказа. (Нулевое значение shipping_date сигнализировало бы о невыполненном заказе и т. д.) Это устранило бы некоторую избыточность, присущую этому дизайну. 08.03.2011

  • 3

    Предполагая, что ваша корзина является отдельной таблицей, она должна иметь идентификатор заказа и идентификатор пользователя в качестве внешних ключей.

    07.03.2011

    4

    Будет ли это работать, если вы поместите столбец «in_cart bit» в таблицу заказов? Таким образом, вы можете использовать те же таблицы, но установить для in_cart значение 1, если заказ еще не завершен.

    07.03.2011
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...