【问题标题】:How can I deal with Coupon database design?我该如何处理 Coupon 数据库设计?
【发布时间】:2020-02-06 22:43:35
【问题描述】:

我通过 Laravel 创建了一个简单的电子商务,对 COUPON 数据库设计有一些疑问,我需要如下:

1- 我需要一张普通的优惠券进行结帐(当用户添加他需要的所有产品然后放入优惠券时,这将从总价中打折)。我已经完成了:

 Schema::create('coupons', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('code');
        $table->enum('type', ['percentage', 'numeric']);
        $table->integer('value');
        $table->integer('count')->nullable();
        $table->date('expired_at');
        $table->timestamps();
  });

2- 我需要为单个类别的产品打折(为属于 T 恤类别的所有产品打折)。

How the design structure of this point?

3- 我需要为特定产品打折。

How the design structure of this point?

有人可以帮我解决这个问题吗?好困惑!

更新:

产品表:

id - name - price - quantity - category_id - brand_id - created_at

分类表

 id - category_name - created_at

订单表

id - status - user_id - address_id - coupon_id - created_at

order_product 数据透视表

order_id - product_id - quantity

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    非常有趣!我认为可能是一个好的方法应该是具有多态关系的数据透视表。是这样的:

    id - couponable_type - couponable_id - coupon_id - "whatever_data"
    ------------------------------------------------------------------
    1  - category        - 1             - 1         - ....
    2  - order           - 1             - 2         - ....
    3  - product         - 1             - 1         - ....
    

    【讨论】:

    • 这张表会做什么?
    • 您可以根据第 2 点和第 3 点的要求,将优惠券与类别、产品或订单关联并重复使用。或者如果您不想重复使用优惠券,可以在优惠券上添加多态关系.我有什么不明白的吗?因为否则,为什么不在类别或产品上添加coupon_id?
    • 那么如果我使用多态(一对多或一对一或多对多(多态)??
    • 有趣......这取决于你是否重复使用......如果你不重复使用一对一。最好不要过度设计...如果您的需求发生变化,请将其添加多对多并更改架构。
    • 现在每个订单都有一张优惠券 |一个类别中的所有产品也有一张优惠券 |每个产品的最后一个我不知道我应该把它做成一对一还是多对多?!
    【解决方案2】:

    由于 COUPON ** 默认与 **PRODUCTS 有关系,因此最好建立一些关系,如下所示:

    • 产品会有一张优惠券还是很多?
    • 优惠券属于一个产品还是多个?

    我认为让产品能够使用许多**优惠券并且优惠券肯定会属于许多产品。在这种情况下,您应该在优惠券和产品之间添加多对多关系。

    productscategories同理,产品应该有很多分类,而后者应该有或者属于很多**products。

    如果您采用这种方法,您可以轻松获得 0102 点。然后,您可以创建优惠券,然后将其附加到特定产品或产品或产品类别。

    要列出产品或类别的优惠券,您可以执行以下操作:

    $product_coupons = Product::findOrFail($id)->coupons;
    $category_coupons = ProductCategory::findOrFail($id)->coupons;
    

    在 Blade 中,您可以像这样访问优惠券:

    @foreach($product->coupons as $coupon)
    {{ $coupon->code }}
    @endforeach
    

    但是@Nahuelsgk 的方法不错,先进但是干净,我觉得还是用polymorphic

    【讨论】:

    • 非常感谢您的扩展!这意味着我必须像这样创建数据透视表多对多关系(优惠券类别,优惠券产品)?
    • 是的,但不要忘记在每个模型中添加关系:优惠券、类别和产品,但如果使用多态,则只需要一个。
    • 那么,如果我使用多态,我需要多对多或一对一,或者我需要什么?
    • 使用多对多 Polymorphic Many To Many
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2021-06-25
    • 2020-06-23
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多