拉拉维尔(不仅是)多对多关系属于所有人



我有两个表。"产品"和"折扣"。 然后,我为多对多关系创建一个连接表"discount_product"。目前为止,一切都好。

现在,如果我想获得属于所有产品的折扣,我必须为我拥有的尽可能多的产品插入到连接表中。这意味着拥有 10000+ 个产品,我必须在连接表中插入 10000+ 行以获得一个折扣?这只是一个折扣!如果我有 1000 个怎么办?

这迫使我回到旧的(错误的(方式,当我在"折扣"表中只有一列"product_ids",上面有这样的"1|2|4|7|23|..."之类的内容。(或"*"表示"属于所有人"(,然后制作一小段PHP代码来检查折扣是否属于所有或某些产品。我知道这是错误的做法。那么有没有更好的方法来正确做到这一点呢?

结构:

**products**
id 
description
price
**discounts**
id
procent
value
**discount_product**
product_id
discount_id

我建议尝试改变一些业务逻辑。

  • 如果折扣不在discount_product中,则意味着它适用于所有产品。
  • 如果折扣在discount_product,则意味着它仅适用于某种产品。
  • 如果您需要确保折扣未应用于任何产品,请在折扣中添加字段is_active。

这只是我的想法。

我相信有时由于优化而对数据库进行非规范化是有用的,我会按照您对product_ids字段的建议进行操作。

最新更新