我对数据库不太熟悉,但如果我有这个设置:
Payment -> Advances -> Advance Payments
因此,payment
可能会因应付总金额不足而产生advance
。根据客户的意见,当您想要制作advance payment
时,您必须将advance payment
伪装成payment
- 用于自己的会计目的。我该怎么做呢。
目前,advances
拥有payments
的外键,而advance payments
拥有advances
的外键。
一个简单的场景:
我们的订单总额为100美元。客户支付80美元,先进20美元。因此,我们创建了advance
(提前1)附加(fk'd)到此payment
(付款1)。客户再次订购,此次总额为50美元,仅支付40美元,因此创建了与新advance
(付款2)相关联的另一个payment
(提前2)。
当客户决定要付清advances
时,payment
已创建(付款3),advances
(预付1和预付2)会添加到payment
1}}(付款3)。这样做是为了当它在系统中显示时,员工可以选择选择哪个advance
进行付款。它不像获得总数然后减去payment
金额那么简单。
因此,当他们输入金额时advance payment
已创建并附加到advance
,因为advance payments
已转到advances
。
现在的问题是,如果我想查看付款创建了哪些预付款,我将如何做?
我不想破坏payment - advance - advance payment
- 或我的结构吗?我想在paymentids
表中只有advance payment
但是会创建payments
和advance payments
之间的关系,忽略作为中间人的advance
。我可能会错误地考虑这个问题,但我不确定。
更多信息:
Payment Table
-------------
id : pk
amount
Advance Table
-------------
id
amount
paymentId // payment that created the advance
Advance Payment Table
---------------------
id
amount
advanceId
我认为错误的提议是:
Payment Table
-------------
id : pk
amount
Advance Table
-------------
id
amount
paymentId // payment that created the advance
Advance Payment Table
---------------------
id
amount
advanceId
paymentId <---- add paymentid
我认为这会破坏结构/流程,付款将不再有预付款的预付款。
更多信息 - 我们正在使用linq和SQL Server 2008.我不知道这是否有所作为。
这可能非常令人困惑,但我试图以最好的方式解释它。
答案 0 :(得分:0)
如果您在AdvancePayment表中有一个advanceId,那么它已经链接到Payment表。所以我认为不需要另外一把外键。
所以,如果我理解你的故事是正确的。订单价格必须等于付款和预付款的总和。然后,AdvancePayment金额的总和必须等于链接的Advance。
SELECT AP.id FROM AdvancePayments AP
INNER JOIN Advances A
ON AP.advanceId = A.id
INNER JOIN Payments P
ON A.paymentId = P.id
WHERE P.id = 1