2

我有这些表:

类别:

name - created_at

产品:

id - name - price - quantity - category_id - brand_id

作为商店的所有者,我有这两张表需要为我的产品创建折扣。所以我创建了餐桌折扣:

折扣:

id - type('percentage','numeric') - value - cancel - expired_at

所以我需要:

1-对属于例如类别的所有产品(T恤)打折

2-对我需要的特定产品或产品打折

我的闭嘴:

创建了两个数据透视表:

discount_product ( discount_id -  product_id )

discount_category ( discount_id - category_id ) 

这是做类似事情的最佳做法吗?

4

1 回答 1

1

您的方法适合您当前的要求,保持两个枢轴保持折扣分开,索引将提供获取数据的速度,但缺点是您需要从 2 个表中查询以获取所有折扣(会稍微慢一些)。

以下只是一种可能,您可以忽略它,但请尝试阅读

但我想提几个可能性

  • 如果店主想对特定品牌应用折扣怎么办?(假设您同意添加此功能)例如他希望所有 Raymond 产品都有折扣?使用当前模式,您需要找到所有带有 Raymond's 的产品brand_id,并将表中的单个条目添加discount_product到所有这些产品(并不是那么困难,但表中的数据会变得非常大),或者为品牌创建一个新的数据透视表。
  • 同样,如果店主想要为所有 Raymond(品牌)衬衫(我假定的类别)打折,同样别无选择,只能对单个产品应用打折。
  • 如果只针对特定性别或年龄组打折怎么办?
  • 或者衣服尺码

(好吧,我知道我想太多了,因为这种要求的可能性很低。如果存在这么多的要求,使用库或切换到 wordpress/Magento 可能会更好)。

所以我的观点是,虽然将这些折扣附加到单个产品上似乎是一种简单的方法(假设您没有为每种类型的折扣创建数据透视表),但如果您需要更大的灵活性(我个人认为这也很重要。A灵活的项目更容易扩展,将来必须在项目上工作的人会少骂你)保留单个数据透视表并按类型区分它们不是更好吗?(aaargghhh 听起来很痛苦……但是是吗?)

那么 Laravel 有一个解决方案,多态关系。是的,现在您只需要一个用于枢轴的表,然后让 Laravel 发挥作用(好吧,它只是将带有命名空间的模型名称存储在类型列中)。如果您不想使用 Laravels Polymorph,它会变得更加复杂,您需要一个类型表,将每种类型存储在该表中,然后在数据透视表中放置一个外键。

在加入并选择遵循此方法之前,请考虑一下您是否真的需要它?(我承认大部分都不是你的问题,我只是因为我想太多才提到它)你确定你只需要这两种折扣吗?你能拒绝任何其他类型的请求吗?你不在乎谁来收拾你的烂摊子?如果您的回答是肯定的,那么只需坚持您当前的模式。

所以,选择你觉得更合适的

于 2020-02-08T15:00:35.777 回答