【问题标题】:Monthly rent invoice and payments database schema月租金发票和付款数据库架构
【发布时间】:2015-08-06 03:09:42
【问题描述】:

我正在尝试为我的应用程序创建一个架构。我的申请是关于物业(房屋/公寓)租金管理的。

我现在面临的最大困惑是如何实施每月付款并记录这些付款以供以后报告。此外,这些付款必须与发票相结合。这有点太令人困惑了,在数据库部分我不是专家。

有很多关于在线编码的帮助,但真正创建一个模式我不确定如何学会制作如此复杂的模式。

我有大部分桌子。加上创建的付款表,其中有

paymentID,
TenantID,
TotalDues,
PaymentRecieved, //Amount Recieved for the current month dues
PaymentRemaining, //If not fully paid the dues and still remaining..
DateRecieved,
etc etc..

这只是一张简单的表格,但我真的很困惑如何使它更灵活,以便如果租户本月根本不支付租金,那么下个月应该得到总租金。或者,如果本月支付了一半或部分租金,则应在下个月进行跟踪。

我应该怎么做才能使这个系统更灵活并引入发票系统?


更新:

根据我收集的一些答案,我需要创建另一个表来记录。

所以我们会:

payment_record/Invoice
------------------------------
RecordID | Payment(Month/Year) | Electricity | Gas | Water | Rent | Total
   1            Jan-2015            50          30     5      80    165

我们会有第二张桌子

Payment/Transaction
------------------------------
PaymentID | RecordID(Foreign-Key) | PaymentReceived | DateReceived
   1                1                      100          2015-01-08

所以第三张桌子是

   PaymentDue/Status
   ----------------------------------
   StatusID | PaymentID(Foreign-Key) | PaymentRemaining
      1             1                          65

我是否缺少一些东西,或者我有开始编码所需的东西?

我仍然不确定还有一件事。如果租户为当月支付了一些金额,两天后他为当月支付了更多,我会怎么做。我将如何处理?

我是否需要在paymentduepayment/transaction 表中输入另一个条目?

【问题讨论】:

  • 第一个提示:您可以删除PaymentRemaining,因为这可以从所需的付款减去payments.PaymentRecieved 得出。
  • 要跟踪欠款,也许您可​​以添加一个payment_due 表?如果租金每个月到期,请在此处为到期金额创建记录。您可能需要一个每日计时器系统来为租户添加任何到期记录。要计算应付款总额,您可以通过SUM(payment.due) 按相关租户进行过滤。
  • (修正DateRecieved的拼写 -> DateReceived)。
  • 啊,如果你有一个invoice,那么它可能会和我的payment_due 表一样。请在您的问题中添加所有相关的表模式。
  • 您可能应该在“paymentDue”表中使用 TenantID 替换 StatusID,paymentID 是可选的。对于部分付款,您只需在“交易”表中添加另一条记录,并相应地更新“paymentDue”。基本规则是,始终为“交易”和“发票”插入新条目。对于 paymentDue,如果相同的tenantID 已经存在,则始终更新条目,如果不存在则插入。

标签: php mysql database schema


【解决方案1】:

您需要同时查看架构和您要使用的查询语句来解决问题。

从您的示例中,我意识到您想要一个可以跟踪所有内容的表格,这是完全可行的。但是,它需要复杂的插入语句或存储过程来不断更新该表。

为简单起见,请尝试将其拆分为 2 个表。这应该消除追溯更新以前记录的需要。由于分离,它还可以更快地保持所有对租户状态的查询。第一个仅包含静态付款记录:

paymentID,TenantID,PaymentRecieved,DateRecieved,.....

另一个包含租户的状态

TenantID,PaymentRemaining,LatestPaymentID(or date),...

每次租户支付租金时,插入 1 条静态记录并相应地更新状态表。状态表的更新 SQL 的简单版本可能如下所示。确保将检查添加到诸如 PaymentRemaining - $payment 之类的内容中,而不是让它变成负数(或者让它变成负数,以便租户下个月少付钱?)

INSERT INTO status VALUES ($tenantId,$monthlyRent-$payment,$paymentID) ON DUPLICATE KEY 
    UPDATE PaymentRemaining = PaymentRemaining - $payment, LatestPaymentID = $paymentID;

对于您的每月付款/余额检查,只需查看第二张表。

【讨论】:

  • 谢谢先生,您的回复。所以根据这个概念,我每次都会在两个表中输入两个条目,或者当有一些剩余余额时只在另一个表中输入。
  • 另外,我是否需要制作发票表,如果需要,发票表会在此表之前获取数据吗?请不要介意,这个会计部分的新手,这就是为什么要问很多问题..
  • 每次有人付款时,在第一个静态表 "payment_record" 中插入一个条目。该表的目的是简单地保持记录。然后对“tenant_status”表使用INSERT ... ON DUPLICATE KEY UPDATE ... 来更新其剩余余额。 “tenant_status”每个租户应该有 1 个条目,并且具有最新的余额。
  • 还有发票,可以通过电子邮件发送给租户,也可以打印给租户。我的意思是发票将包含余额,以及总计添加金额的服务列表..例如电费或燃气等将是总和..这将是最好的管理方式。我应该在这些表中创建列还是应该创建另一个发票表?
  • 哦,所以你有电费之类的东西。在这种情况下,只需添加另一个表,如“payment_record”,但用于电。每次有电费账单时,在“elec_bill”表中插入一条记录,并通过将该金额添加到余额中来更新“tenant_status”表
猜你喜欢
  • 2016-05-10
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多