需要有关sql表架构的指导

时间:2015-06-12 22:30:53

标签: sql sqlite

我对SQL很陌生,而且我很难为我的问题提出一个好的桌子等计划。我试图创建一个程序,利用Sqlite让自己更容易辨别邮资。

我有一个项目表,其中包含一些项目细节,例如重量。我的问题在于我计划创建的其余表格。我基本上希望我正在制作的程序根据物品重量,包装重量以及包装中可装入多少物品来决定最佳邮资服务。

我不确定如何实施邮政服务和包装。邮政服务表将具有诸如第一/第二类和最大权重的信息。包装表基本上就像物品表一样,它也有自己的重量(因为需要计算包装的总重量),但是,每个包装可以从物品中装入不同数量的物品表

我是否必须以交叉引用包装表中的项目的方式实施,以便有一列说明每个项目中每个项目的适合程度?我不会确定如何引用服务表以获得服务的最大权重。

我认为实施它会是一个好的尝试:

id INTEGER,title TEXT,sku TEXT,weight DOUBLE

打包

id INTEGER,stock_id INTEGER,title TEXT,weight DOUBLE,max_qty INTEGER,FOREIGN KEY(stock_id)REFERENCES items(id)

服务

id INTEGER,class_type TEXT,max_weight DOUBLE,cost DOUBLE

但是,上述意味着对于我要创建的每个项目,我必须在包表中为该项目可以使用的每个包创建一个新行。

我想知道最好的方法是什么,如果可能的话,可以采取一些建议。

1 个答案:

答案 0 :(得分:1)

  

我是否必须以交叉引用包装表中的项目的方式实施,以便有一个列说明每个项目在每个包中的适合程度?

是的,但不要将交叉引用放在包装表中,而是使用junction table

Proposed database structure in crow's-foot notation

联结表(Item Packaging)对于项目和包裹之间的每个关系都有一行。

例如,假设您有三个项目:

  1. Whatsit(ID 1)
  2. Thingamabob(ID 2)
  3. Doohickey(ID 3)
  4. 你有两种包装类型:

    1. 小盒子(ID 1)
    2. 大盒子(ID 2)
    3. 还要说这是每种包装类型可以容纳的物品数量:

      • 小盒子里的三件套
      • 6个大盒子里的Whatsits
      • 1小盒子里的Thingamabob
      • 3个大盒子中的Thingamabobs
      • 1个大盒子里的Doohickey

      在这种情况下,您可以将这些行插入Item Packaging

      ---------------------------------------------------
      Item ID          Packaging ID         Item Quantity
      ---------------------------------------------------
      1                1                    3
      1                2                    6
      2                1                    1
      2                2                    3
      3                2                    1
      

      您的程序将在其查询中包含联结表,以确定指定项目中可以容纳多少指定项目并计算总权重。然后,您可以将计算出的权重与每个邮政服务的最大权重进行比较。

      例如,要使每个包裹的总重量保持尽可能多的Whatsits:

      SELECT (item.weight * item_packaging.item_quantity + packaging.weight) AS total_weight FROM item JOIN item ON item_packaging.item_id = item.id JOIN packaging ON item_packaging.packaging_id = packaging.id WHERE item_packaging.item_id = 1;
      
相关问题