水电费账户的数据库设计

时间:2016-09-30 09:54:24

标签: mysql database-design

在一个系统中,我需要保存一些不同的电费,水费,回收费用的数据,以便将来进行报告和收费。

今天,每个公用事业账单都有几个不同的帖子/行。例如,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-302016-08-15 to 2016-09-15等等。因此,我正在考虑向名为utility_bill_rows的{​​{1}}表添加一个新列,该列只是daily_cost

所以对上述设计和想法的任何建议都非常感谢。我应该在以后的

中添加一些可能有用的设计

1 个答案:

答案 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