我试图根据客户的要求制作一个库存管理软件,根据产品类型,我按重量或质量购买产品。它的数据库结构如下。
User { id, name, address, role (Customer, Vendor, Labor etc)}
Product {id, name, type}产品类型:
问题是我购买的产品可能要经过四个过程:
以上过程取决于我所购买的产品类型。如果我购买原材料,那么我可以把它给工人,由他们来切割,然后还给我(也就是切割)。在这个过程中,一些材料会被废掉。正如你所看到的,如果我买的是按重量购买的板材,那么它就不再用于切割和旋转(产品类型2)。产品类型2是按质量计算的。
我可以要求客户把他们收到的数量大约放进去,但问题是我如何管理库存,多少是留在劳动场所。
考虑到我是经销商,我从多个供应商购买产品,产品分为几种类型,上面已经提到了。每个销售商都有自己的产品价格。
购买后,产品可以加工,也可以出售。如果要进行加工,将有4个阶段,根据客户的要求,他可以决定在任何阶段销售产品。例如:
我面临的
我创建了下面的模式来解决我的问题,但我不确定根据DBMS的规则它是否正确。
Purchase
{ id, vendor_id, prod_id, weight, qty, focusOn (weight / qty),
rate, amount, remainingWeight, remainingQty }
Job
{ id, purchase_id, prod_id, labour_id, weight, qty, focusOn (weight / qty) }
Returns
{ id, job_id, prod_id, weight, qty }专注于参数检查,检查是否检查退货的重量或数量,以确保责任。
发布于 2018-03-22 12:20:02
你可以把它当作复式记账。每个用户都有一个“帐户”为每个产品,您的信用和借方转帐。你在网络中间扮演“银行”的角色。每个帐户的余额都是库存,无论是手头的出售还是外出工作.
桌子应该是这样的:
Participant
ParticipantId
<other columns>我不特别称它为“用户”,因为参与者不一定是人。你也会有一个参与者的记录。
Product
ProductId
UnitOfMeasure -- will be "kilogram" or "piece"/"quantity"你提到的五个,每一行一排,通过准备好的圆圈。
Account
AccountId
ParticipantId
ProductIt根据您的描述,每个参与者都需要每个产品的帐户,因为没有从例如纸张到圆圈的直接翻译。即使是从一个圆圈到另一个滚动圆,在处理过程中也可能有浪费,所以发送100个单元并不意味着总是返回100个单元。这很像拥有一些美元和日元--你可以相互转换,但即期汇率会波动。每个银行都必须持有自己的银行账户。
您自己将有一个帐户中的五个产品,您所处理的。这代表你的货架上的任何时刻,等待进一步的工作或被出售的物品。
Transfer
TransferId
FromAccountId
ToAccountId
<probably date, time, recipient etc.>
Quantity这里的一行记录了特定产品的给定数量从一个收件人到另一个收件人的移动。您从相应的帐户中了解参与者和产品。从产品中,您可以确定该数量是否代表一公斤或一项。
为了便于处理,您可能希望在每个帐户下复制此操作。这需要另一张桌子:
AccountTransaction
AccountTransactionId
AccountId
TransferId
DebitAmount
CreditAmount对于每次转帐,AccountTransaction中将有两行-- FromAccount和ToAccount各行一行;一行为借方,另一列为贷方。
这些年来,这个表可能会变得很大,查询也会很慢。间隔期(年度帐目?)可能值得将其滚动到一个新的起始余额,并将以前的事务归档到另一个表中。
回答你的问题:
我无法管理我给工人的存货。
该参与者的AccountTransactions之和。
在其结束时还剩下多少(即劳动结束)
嗯,你知道你转了多少钱(上一个问题),但由于你没有很强的转化率或流失率,你不知道他们的车间里到底有多少钱,多少已经报废了。为此,工人必须直接报告废料和浪费情况。
如何为销售目的维护库存细节不是通过一个表来管理的。
您的参与者ID的AccountTransaction表之和-这些帐户记录分配给您的单位,大概,坐在您的仓库。
道歉:我上次写会计软件已经有一段时间了。现在很多细节都有点模糊。我没有能力修改所有的细节,并键入一个完全完善的答案。有大量的在线资源可以更充分地解释它。一些技巧可能需要围绕外键在传输和AccountBalance。希望这是足够清楚的指出你的正确方向。祝好运。
发布于 2018-03-26 04:10:39
(由于在此过程中产生的废料,pcs的数量每次都不一样,因此我无法按公式计算pcs的数量,从现在起,我们可以预料到大约的pcs数可能会变化为+/- 10到100)。
产生的废料不是固定的,因为产品质量或尺寸不固定。
因为这个原因很难确定,
他们最后还剩下多少(即劳动结束)。
Product Type
TypeID
ProductType
Product Process
ProcessID
ProcessName
Product Master
ProductID
ProductName
ProductVendorMapping
ProductID
VendorID
TypeID
Qty
UoMID
Cost
ProductStage
PStageID
ProductID
ProcessID
ProcessDate一旦任何产品被购买,这个表将根据那个product.Thereafter的阶段有条目,它将在完成每个阶段之后继续更新。
ProductTaskName
TaskID
Taskname
ProductID
TaskDate假设有新的产品1到达,该产品将分配给加工工人。
比如说,在一个月后,这项任务就结束了,同一产品的新到货将被加工。
那么用户和系统将如何区分这两个任务,因为产品和劳动是一样的。
因此,在部署到劳动之前,先创造新的任务,然后再着手劳动。
ProductLabourMapping
ProductLabour id int identity(1,1)
ProductID
LabourID
TaskID
QtyLentToLabour
UoMID
StartDate
PieceDimension (to be discuss)
PieceReturn int nullable
ReturnDate nullable
ScrapWeight nullable
ScrapUOMID nullable
isComplete bit default(0)由于没有固定公式(如您所说的),您必须手动记录劳动和系统之间的每一项事务。
Labour1获得50公斤的产品1。所以新的条目在这个表中。此后,在第一天发送了500台pcs机,因此更新相同的任务。
一旦所有的劳动都完成了相同的任务,Iscomplete =1。在这个阶段,productstage表可以更新。
ProductTransaction
ProductID
CustomerID
TransactionDate
Cost
ETC这个表记录了产品的销售情况。
当原材料交给工人时,你会怎么卖呢?
https://dba.stackexchange.com/questions/200357
复制相似问题