【问题标题】:database model for products and product package with different combinations不同组合的产品和产品包的数据库模型
【发布时间】:2013-01-09 17:39:03
【问题描述】:

你会如何设计你的数据库来实现这个功能?

考虑一个我们想要创建产品关系(包)...

的场景

假设我们创建了一个 ProductTbl

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

我们希望提供一个产品包,为客户提供更好的费用。

例如如果客户选择prepaid-A + internet + mms,他们将收取 25 美元(而不是 29 美元)的 pkg 费用。

设计

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

例如pkg组合的

ProdPkgTbl

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

这意味着组合

  • pkgid 1 -> 预付-a、mms 和互联网,pkg 费用为 25 美元
  • pkgid 2 -> 互联网和电子邮件一起收取 10 美元的费用
  • pkgid 3 -> prepaid-c, internet, mms, email all together for 45 usd

因此,如果客户获得了 prepaid-c + internet,但他们没有得到 45 美元的交易,他们将支付 39 + 9 = 48 美元的正常费用。

现在这些表格仅用于演示,我希望得到您的意见和建议,以便朝着正确的方向建模。

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

(如何进行这样的选择?在 pkg 表上?) 如何为此建立一个好的数据库模型?

请提供网址、提示和任何有价值的建议,以将我推向正确的方向。

非常感谢。

【问题讨论】:

    标签: sql database-design database-relations


    【解决方案1】:

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

    目录中还出售营销包。它可以由商品、服务或其他营销包组成。

    每个订单的价格确实不同。您可以在 good 表中设置底价,在 service 表中设置月价,在营销包表中设置底价。

    【讨论】:

    • 谢谢你,尼尔,我正在努力理解这个模型。营销包的想法听起来不错。但是如何确保一个营销包只能存在一次。例如,我们不想冒险 good1+good2 在 packageA 和 feeA 中。同样的 good1+good2 再次出现在带有 feeB 的 packageB 中。这种情况决不能发生。
    • 在这种情况下还有什么进一步的 cmets 或进展吗? :)
    • @MrSimpleMind 您需要对关系划分使用检查约束,以确保不存在相同的营销包。 dba.stackexchange.com/questions/45829/…
    • 非常感谢尼尔的所有意见!等我们开始项目的时候,我会告诉你进度的……
    • 对不起,我的意思是你应该使用触发器,而不是 CHECK
    【解决方案2】:

    我希望对此有一些意见,但也许问题是“混乱”来回答。 :o)

    我现在的模型是这样的:

    ProductTbl

    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
    

    ProductPkgTbl

    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     
    

    ProductPkgFeeTbl

    ppkg_id   ppkig_fee
    1         25
    2         10
    3         45
    

    但是上面有一些缺陷,那就是有人可以在不同的 pkg 中插入相同的产品并收取不同的费用。

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

    请以您在此类问题上的经验将我推向正确的方向...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      相关资源
      最近更新 更多