【发布时间】:2014-10-22 06:02:19
【问题描述】:
我正在尝试为几家公司生产的产品、它们的配件以及产品和配件与客户帐户的关联设计一个数据库。
您将如何设计这样一个数据库来实现此功能?
业务规则
- 一个产品总是与一个公司相关联,一个公司可以有很多产品。
- 除产品外,公司还可能有配件,在某些情况下,还有这些配件的组合(捆绑包)。
- 公司产品可以与同一公司的一个或多个配件相关联,也可以与这些配件的组合(捆绑)相关联。
- 客户可以将一种不带附件的产品关联到他的帐户,或者将一种产品与一个或多个附件或捆绑包(附件的组合)关联。
我的方法
访问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 |
【问题讨论】:
-
一个产品可能不属于一家公司?
-
不,产品永远属于公司。
-
在这种情况下,我将删除关系 product-accessory
-
好的,但是如果我删除关系,我怎么知道可以与产品关联的附件?并非公司的所有配件都可以与公司的所有产品相关联。
-
每个配件都属于一家公司,所以您可以直接处理配件
标签: mysql sql database database-design relational-database