Sql 具有不同组合的产品和产品包的数据库模型

Sql 具有不同组合的产品和产品包的数据库模型,sql,database-design,database-relations,Sql,Database Design,Database Relations,您将如何设计数据库以实现此功能 考虑一个场景,我们希望创建一个产品关系(包) 假设我们创建了一个产品TBL prod_id prod_name prod_fee 1 prepaid-A 19 usd 2 prepaid-B 29 usd 3 prepaid-C 39 usd 4 internet 9 usd 5 mms 1 usd 6 emai

您将如何设计数据库以实现此功能

考虑一个场景,我们希望创建一个产品关系(包)

假设我们创建了一个产品TBL

prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_name    prod_fee
1         prepaid-A    25 usd
1         mms          25 usd
1         internet     25 usd

2         internet     10 usd
2         email        10 usd

3         prepaid-C    45 usd
3         internet     45 usd
3         mms          45 usd
3         email        45 usd
prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_id      prod_name 
1         1            prepaid-A 
1         5            mms       
1         4            internet  

2         4            internet  
2         6            email     

3         3            prepaid-C 
3         4            internet  
3         5            mms       
3         6            email     
ppkg_id   ppkig_fee
1         25
2         10
3         45
我们想提供一个产品包,为客户提供更好的费用

例如,如果客户选择预付费-A+互联网+彩信,他们将收取25美元的打包费(而不是29美元)

设计

  • 具有相同组合的pkg只能存在一次
  • 如果可能,一个包装可以有无限数量的产品。(通常为2-4)
例如,包装组合

ProdPkgTbl

prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_name    prod_fee
1         prepaid-A    25 usd
1         mms          25 usd
1         internet     25 usd

2         internet     10 usd
2         email        10 usd

3         prepaid-C    45 usd
3         internet     45 usd
3         mms          45 usd
3         email        45 usd
prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_id      prod_name 
1         1            prepaid-A 
1         5            mms       
1         4            internet  

2         4            internet  
2         6            email     

3         3            prepaid-C 
3         4            internet  
3         5            mms       
3         6            email     
ppkg_id   ppkig_fee
1         25
2         10
3         45
这意味着

  • pkgid 1->预付费a、彩信和互联网,打包费为25美元
  • pkgid 2->互联网和电子邮件,费用为10美元
  • pkgid 3->预付费c、互联网、彩信、电子邮件,总共45美元
因此,如果客户获得了预付费-c+互联网,但他们没有以45美元的价格获得这笔交易,他们将支付39+9=48美元的正常费用

现在,这些表格只是为了演示,我想得到你们的意见和建议,以正确的方向对其进行建模

我们需要首先选择查询客户当前的费用计划(基于使用过的产品/服务),然后查看产品包装,看看包装交易对他们是否有效

(如何选择?在包装表上?) 如何拥有一个好的数据库模型

请用URL,提示,任何有价值的建议,把我推向正确的方向


非常感谢。

我希望得到一些关于这方面的意见,但问题可能是回答“混乱”:o)

我现在的模型是这样的:

产品TBL

prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_name    prod_fee
1         prepaid-A    25 usd
1         mms          25 usd
1         internet     25 usd

2         internet     10 usd
2         email        10 usd

3         prepaid-C    45 usd
3         internet     45 usd
3         mms          45 usd
3         email        45 usd
prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_id      prod_name 
1         1            prepaid-A 
1         5            mms       
1         4            internet  

2         4            internet  
2         6            email     

3         3            prepaid-C 
3         4            internet  
3         5            mms       
3         6            email     
ppkg_id   ppkig_fee
1         25
2         10
3         45
ProductPkgTbl

prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_name    prod_fee
1         prepaid-A    25 usd
1         mms          25 usd
1         internet     25 usd

2         internet     10 usd
2         email        10 usd

3         prepaid-C    45 usd
3         internet     45 usd
3         mms          45 usd
3         email        45 usd
prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_id      prod_name 
1         1            prepaid-A 
1         5            mms       
1         4            internet  

2         4            internet  
2         6            email     

3         3            prepaid-C 
3         4            internet  
3         5            mms       
3         6            email     
ppkg_id   ppkig_fee
1         25
2         10
3         45
ProductPkgFeeTbl

prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_name    prod_fee
1         prepaid-A    25 usd
1         mms          25 usd
1         internet     25 usd

2         internet     10 usd
2         email        10 usd

3         prepaid-C    45 usd
3         internet     45 usd
3         mms          45 usd
3         email        45 usd
prod_id   prod_name    prod_fee
1         prepaid-A    19 usd
2         prepaid-B    29 usd
3         prepaid-C    39 usd
4         internet      9 usd
5         mms           1 usd
6         email         3 usd
ppkg_id   prod_id      prod_name 
1         1            prepaid-A 
1         5            mms       
1         4            internet  

2         4            internet  
2         6            email     

3         3            prepaid-C 
3         4            internet  
3         5            mms       
3         6            email     
ppkg_id   ppkig_fee
1         25
2         10
3         45
但上面的内容也有一些缺陷,就是有人可以在不同的包装中插入相同的产品,并且收取不同的费用

我真的不知道如何确保pkg在sql中是唯一的。当然,编程语言/存储过程/触发器等可以进行检查!但我想要一个100%完美的设计

请用你在这类事情上的经验把我推向正确的方向


您正在销售目录中的商品或服务。您也可以销售上述组合。这称为营销套餐(或捆绑或组合)

产品目录中还提供了一个营销包装。它可以由商品、服务或其他营销包组成

每个订单的价格真的不一样。您可以在good表中设置基价,在service表中设置月价,在marketing package表中设置基价


谢谢你,尼尔,我正在努力理解这个模型。这听起来很好的营销包装的想法。但如何确保一个营销套餐只能存在一次呢。例如,我们不想冒good1+good2与feeA在包装A中的风险。同样的货物1+货物2再次与feeB一起装入包装B中。这种情况决不能发生。在这种情况下有任何进一步的评论或进展吗?:)@SimpleMind先生,您需要对关系部门使用检查约束,以确保不存在相同的营销包。非常感谢尼尔的所有意见!我会在我们开始项目后告诉你进展情况…对不起,我的意思是你应该使用触发器,而不是检查