在一个系统中,我需要保存一些不同的电费,水费,回收费用的数据,以便将来进行报告和收费。
今天,每个公用事业账单都有几个不同的帖子/行。例如,electricity
帐单可以包含fixed fee
(帐单日期范围的金额)consumption
(通常按电费计算每千瓦时电费,水费用m3等)taxes
(可能是能源税)
由于我希望以后能够使用数据库来搜索各种时间段的数据,公用事业账单类型等我需要提出一个坚实的数据库设计。所以下面将是我的开始。
`utility_bill`
`id` int(11)
`vendor_id` int(11)
`type_id` int(11)
`notes` varchar(255)
`date_issued` date
`date_due` date
`utility_bill_rows`
`id` int(11)
`utility_bill_id` int(11)
`name` varchar(64)
`startdate` date
`enddate` date
`units` double
`unit_price` double
`unity_type` varchar(16)
数据示例:
`utility_bill`
1 2 2 Electricty bill (august) 2016-09-01 2016-09-30
`utility_bill_rows`
1 1 Fixed fee 2016-08-01 2016-08-31 31 10 days
2 1 Consumption 2016-08-01 2016-08-31 500 1 kwh
3 1 Government taxes 2016-08-01 2016-08-31 500 0.1 kwh
在上面的示例中,bill_total
将是310 + 500 + 50 = 860
并非所有水电费都基于月度周期。在某些情况下,它可能是2016-07-01 to 2016-09-30
,2016-08-15 to 2016-09-15
等等。因此,我正在考虑向名为utility_bill_rows
的{{1}}表添加一个新列,该列只是daily_cost
。
所以对上述设计和想法的任何建议都非常感谢。我应该在以后的
中添加一些可能有用的设计答案 0 :(得分:0)
一些建议:
假设您想要计算在特定时间内收取的所有税款。你会得到`姓名="政府税"在查询中。这不是很强大而且很尴尬。
尝试将这些类别放在名为oh billedUnits
:
ID Name Other_info
1 Fixed fee ...
2 Consumption ...
3 Taxes ... -- "Government" is a duplicative redundancy
然后,使用name
而不是utility_bill_rows
中的字段billedUnitID
,并使用查找表的ID值。这也可以更容易地添加新的类别,如"太阳能附加费"。
最重要的改进是在term
表中添加utility_bill
字段。这可以是单字符指示符,如“M' M'每月和' Q'对于季度或一个小整数,如期限为30天和90天。这将大大简化仅涉及月度账单或仅涉及季度账单的查询。我倾向于整数,因为这也会简化每日计算。
如果行的内容是稳定的,您可以添加daily_cost
字段 - 也就是说,如果一旦写入值,则很少更改。如果有相对频繁的调整,请不要打扰,只需在需要时重新计算。
另外,要注意概念"成本"并且"充电"。最后,所有这些价值都是收费。您的客户会看到成本。因此,如果您确实创建了此字段,则更好的名称为daily_charge
。