一件商品有三种规格(或三种以下),例如:餐巾纸,1箱=4盒=20包。
需求是商品的规格和数量可配置,录入时可选择任意规格,页面显示最小规格。
请问如何进行数据库设计?数据库 设计

解决方案 »

  1.   

    --规格
    create table tt1( a number,b varchar2(10),ca varchar2(10),num number);
    insert into tt1 values(1,'箱',2,4);
    insert into tt1 values(2,'盒',3,20);
    insert into tt1 values(3,'包',null,1);--录入数据
    create table tt2(pname varchar2(10),num number,unit varchar2(10));
    insert into tt2 values('a',10,1);
    insert into tt2 values('b',11,2);
    insert into tt2 values('c',12,3);
    insert into tt2 values('c',13,1);--前台页面显示
    with t as
     (select a, power(10, Sum(Log(10, num))) num
        from (select connect_by_root(a) a, num from tt1 connect by a = prior ca)
       group by a)
    select pname, tt2.num * t.num num from tt2 join t on tt2.unit = t.a;
      

  2.   

    表A:商品类型、规格类型(箱、盒或者包)、最小规格(该规格对应的最小规格数)
      比如:餐巾纸  箱    20
            餐巾纸 盒    5
            餐巾纸 包    1
    表B: 商品类型、规格类型、数量
    比如: 餐巾纸  箱  10
           餐巾纸 盒  5
    在页面显示就好办了 根据商品类型和规格类型 表B中数量*表A的最小规格
      

  3.   

    不知道以下涉及是否可行:
    uni_id  uni_name sub_id amount  备注
    1 箱 2 4 1箱=4条
    2 条 3 5 1条=5包
    3 包 1
    id              prod_id         prod_name       amount  uni
    1000000001 SCN-1000-23500 清风牌纸巾 10 箱
    1000000002 SCN-1000-23501 手帕纸           5 条
    1000000003 SCN-1000-23502 面纸           3 包
    select a.*, a.amount * b.amount as amount
    from tb_product a,
         (select uni_name,
                 nvl(value *(select value from tb_dic_uni where uni_id = a.sub_id),1) amount
          from tb_dic_uni a
          start with sub_id is null
          connect by prior uni_id = sub_id) b
    where a.unit = b.uni_name
    /*
    1000000003 SCN-1000-23502 面纸    3   包 3
    1000000002 SCN-1000-23501 手帕纸    5 条 25
    1000000001 SCN-1000-23500 清风牌纸巾  10 箱 200 */