Sql 具有不同组合的产品和产品包的数据库模型
您将如何设计数据库以实现此功能 考虑一个场景,我们希望创建一个产品关系(包) 假设我们创建了一个产品TBLSql 具有不同组合的产品和产品包的数据库模型,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
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)
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美元
非常感谢。我希望得到一些关于这方面的意见,但问题可能是回答“混乱”: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先生,您需要对关系部门使用检查约束,以确保不存在相同的营销包。非常感谢尼尔的所有意见!我会在我们开始项目后告诉你进展情况…对不起,我的意思是你应该使用触发器,而不是检查