产品的设计数据结构

时间:2018-12-04 10:21:53

标签: laravel laravel-5 database-design class-design

我需要使用产品数据设计表的结构,以满足以下要求:

1. A product consists of the following fields: EAN, CN, description, pvp
2. There are several types of users that access the products. The user types are not stable, they can be added or deleted at any time.
3. Any of the fields of the products may vary depending on the type of user who views it. For example:

我们有三个用户:

1 - John - guest
2 - David - client
3 - Vicent - vip

默认情况下,我们有此产品的以下数据:

8470001234567 - 123456 - Iphone X - $799

来宾用户没有看到此数据,而是看到以下内容:

8431239876547 - 987654 - Iphone X - $849

默认情况下,客户端用户看到数据,而vip用户看到:

8470001234567 - 654321 - Iphone X Sale - $709

这意味着用户可以看到给定产品的默认数据,除非其类型有例外。该异常可以影响任何字段(ID除外)。

我可以想到这种结构:

  • 产品 id ,ean,cn,说明,pvp
  • PRODUCT_EXCEPTION product_id user_type_id ,ean,cn,说明,pvp

我已经证实使用这种结构可以进行很多查询,您是否想到了一种优化方法,因此不必进行太多查询?

注1:产品包含在具有一定数量产品的报价中。 注意2:我使用Laravel。 Offer模型与产品有关,也就是说,我通过以下方式获取产品:$ offer-> products()

1 个答案:

答案 0 :(得分:0)

仅查看问题描述,我就得出了这个结论,它等同于您对Product_Exception提出的建议:

enter image description here

理由:

  • 由于用户类型各不相同,因此无法将值直接放在“产品”表中。例如3个用户类型== 3个价格。不在这里。因此,您需要在Product和UserType之间建立链接表。
  • 链接表将包含1个用户类型的1个产品的特征。
  • 如果要使用默认值,也可以将特征放在“产品”表中。但是,您的查询就会变得更大!检查是否存在异常值,如果不使用默认值。

所以您的解决方案对我来说很有意义。