我正在尝试为几家公司制造的产品,他们的配件以及产品和配件与客户帐户的关联设计数据库。
您如何设计这样的数据库来实现此功能?
业务规则
MY APPROACH
访问https://www.dropbox.com/s/mmxqzgagbw1sek1/Ejemplo.png?dl=0
为了实现只有现有的附件/捆绑产品组合可以与用户限制相关联,我在代码中添加了以下业务规则:如果产品组合存在于products_accessories中,则该组合符合条件;否则代码将触发错误。
最后,为了使产品和附件/捆绑包的所有可能组合合格,由产品和附件(products_accessories)组成的表具有以下复合主键:(id,product_id和accessory_id)。
例如:
我有p1产品和以下附加组件:a1,a2和a3。 a1和a3可以组合使用。在此示例中,products_accessories表如下所示:
| id | product_id | accessory_id |
|----|------------|--------------|
| 1 | p1_id | a1_id |
| 2 | p1_id | a2_id |
| 3 | p1_id | a3_id |
| 4 | p1_id | a1_id |
| 4 | p1_id | a3_id |
答案 0 :(得分:2)
我建议使用'物料清单'类型方法。
+-------------+
| COMPANIES |
+-------------+
| #company_id |
+-------------+
|
+--------^--------+ +-----------------+ +------------+
| PRODUCTS |---< CLIENT_PRODUCTS >---| CLIENTS |
+-----------------+ +-----------------+ +------------+
| #product_id | | #client_id | | #client_id |
| #company_id | | #product_id | +------------+
| is_offereable | | #company_id |
+-----------------+ +-----------------+
| |
+---------------------+
| PRODUCT_BUNDLES |
+---------------------+
| #parent_product_id |
| #child_product_id |
| #company_id |
| quantity |
+---------------------+
company_id作为产品PK的一部分包含在内,因此只能捆绑同一公司的产品。
产品表最初包括单个产品和个别配件。来自同一公司的个别产品和配件可以捆绑在一起形成新的“产品”。这些新的“产品”可能会与单独的产品或配件或其他捆绑捆绑在一起,形成更多的“产品”。
is_offerable标志表示单个产品,附件或捆绑包是否可能与客户关联。
您还可以通过在PRODUCTS表上设置产品类型列来限制哪些产品与客户关联,并确保只有PRODUCT类型的产品或包含至少一个PRODUCT的产品类与客户关联。