Closed. This question is off-topic。它目前不接受答案。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
三年前关闭。
在一个系统中,我需要为一些不同的水电费账单保存数据,以便将来进行报告和计算。
今天,每个公用事业账单都有几个不同的帖子/行。例如,electricity账单可以包括fixed fee(账单日期范围内的金额)consumption(通常按千瓦时电费、立方米水费等计费)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中添加一个名为daily_cost的新列,这个列就是(units * unit_price) / (enddate - startdate in days)
因此,对以上设计和思想的任何建议都是非常感谢的。我是否应该对设计进行一些补充,以便以后在

最佳答案

一些建议:
假设你想把一段时间内所有的税收加起来。查询中应该有“where name=”Government taxes“。这不是很有力,只是尴尬。
尝试将这些类别放在一个名为“噢,billedUnits”的单独查找表中:

ID  Name        Other_info
 1  Fixed fee   ...
 2  Consumption ...
 3  Taxes       ...  -- "Government" is a duplicative redundancy

然后,使用name并使用查找表的ID值,而不是utility_bill_rows中的字段billedUnitID。这也使得添加“太阳能附加费”等新类别更加容易。
最显著的改进是在term表中添加一个utility_bill字段。这可以是一个单字符指示符,例如“M”表示每月,而“Q”表示季度,或者是一个小整数,例如30和90表示学期的天数。这将大大简化仅涉及每月账单或仅涉及季度账单的查询。我稍微倾向于整数,因为这样也可以简化每天的计算。
如果行的内容是稳定的,您可以添加一个daily_cost字段——也就是说,如果一次写入,值很少发生变化。如果有相对频繁的调整,不用麻烦,只要重新计算时需要。
同时,要了解“成本”和“费用”的概念。在你的终端,所有这些值都是收费。是你的客户看到了成本。因此,如果您创建了这个字段,一个更好的名称应该是daily_charge

关于mysql - 水电费账单数据库设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39788692/

10-11 02:12