Usage of Discount Coupon depends on the pricing policy of the company.
If the pricing policy is 'free + pay per course', then the discount coupons can be used while purchasing a product.
If the pricing policy is 'free + paid membership subscription', then the coupon can be used for the membership subscription.

A Discount Coupon will have the following properties Coupon code, discount, quantity, redeemed count, created date and expiry date

DB schema for discount coupon

Table Name: coupons

Column_name type Description
id integer primary key
code varchar A unique value
quantity integer Number of times the coupon can be used
redeemed_count varchar number of times the coupon is used
discount varchar discount in percentage
expiry_date date_time date on which the coupon will expire
created_at date_time date of which the coupon was created
updated_at date_time coupon properties updated date
deleted_at date_time when this coupon was deleted

Table Name: product_coupons

Column_name type Description
id integer primary key
coupon_id varchar A unique value
product_type integer type of the product. this can be 'Course', 'Certification', 'LiveEvent', or Subscription
product_id varchar On which product, this coupon can be used
created_at date_time date of which the coupon was created
updated_at date_time coupon properties updated date

Table Name: coupon_usages

Column_name type Description
id integer primary key
user_id integer id of the user who used the coupon
coupon_id integer references the coupon.
product_id integer On which product, this coupon was used
product_type varchar type of the product, this can be 'Course', 'Certification', 'LiveEvent', or Subscription
order_id integer Order id
created_at date_time date of which the coupon was created
updated_at date_time