gpt4 book ai didi

mysql - 公司、产品、配件和协会的数据库设计

转载 作者:搜寻专家 更新时间:2023-10-30 23:07:10 29 4
gpt4 key购买 nike

我正在尝试为多家公司生产的产品、他们的配件以及产品和配件与客户账户的关联设计一个数据库。

您将如何设计这样的数据库来实现此功能?

商业规则

  • 一个产品总是与一个公司相关联,一个公司可以有很多产品。
  • 除产品外,公司还可能有配件,在某些情况下,还可能有这些配件的组合( bundle )。
  • 公司产品可以与同一公司的一个或多个附件相关联,也可以与这些附件的组合( bundle )相关联。
  • 客户可以将一个没有配件的产品关联到他的帐户,或者将一个产品与一个或多个配件或 bundle (配件的组合)相关联。

我的方法

访问https://www.dropbox.com/s/mmxqzgagbw1sek1/Ejemplo.png?dl=0

为了实现只有现有的产品与配件/ bundle 的组合才能与用户限制相关联,我在代码中添加了以下业务规则:如果组合存在于 products_accessories 中,则该组合符合条件;否则代码将触发错误

最后,为了使产品和配件/ bundle 的所有可能组合都符合条件,由产品和配件组成的表 (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 |

最佳答案

我建议采用“ Material list ”类型的方法。

    +-------------+
| 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
  • 产品
    • 主键:product_id, company_id
    • FK: company_id 引用公司 company_id
  • PRODUCT_BUNDLES
    • 主键:parent_product_id, child_product_id, company_id
    • FK:parent_product_id、company_id 引用产品 product_id、company_id
    • FK:child_product_id、company_id 引用产品 product_id、company_id
  • 客户
    • 主键:client_id
  • CLIENT_PRODUCTS
    • 主键:client_id、product_id、company_id
    • FK: client_id REFERENCES CLIENTS client_id
    • FK:product_id、company_id 引用产品 product_id、company_id

company_id 作为 PRODUCTS PK 的一部分包含在内,因此只有来自同一公司的产品才能捆绑。

产品表最初包括单个产品和单个配件。来自同一家公司的个别产品和配件可能会捆绑在一起形成新的“产品”。这些新的“产品”可能会与单独的产品或配件或其他 bundle 捆绑在一起,形成更多的“产品”。

is_offerable 标志指示单个产品、配件或 bundle 是否可能与客户相关联。

您还可以通过在 PRODUCTS 表中添加产品类型列并确保只有 PRODUCT 类型的产品或包含至少一种 PRODUCT 的 bundle 与客户相关联,从而限制哪些产品与客户相关联。

关于mysql - 公司、产品、配件和协会的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547712/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com