首页 > 解决方案 > 在当前表中保存去年的值

问题描述

这是一个关于数据库设计的更普遍的问题。我目前正在将 Excel/VBA 程序迁移到 SQL 并遇到以下情况,我需要深思熟虑,因为我是第一次这样做。

excel中的现状: excel sheet

到目前为止的新 MySQL 表的一部分:

+--------------+-------------------+---------+----------+-------+---------------+
| licenseplate | mileage_last_year | january | february | march | first_quarter |
+--------------+-------------------+---------+----------+-------+---------------+
| BP 11-111    |              NULL |     100 |      100 |   100 |           300 |
| BP 11-222    |              NULL |     561 |     1111 |   707 |          2379 |
+--------------+-------------------+---------+----------+-------+---------------+

“first_quarter”等都是生成的列,目前没有问题。

但是,将当前年份的里程保存到下一年的最佳做法是什么?

  1. 每年一个新表并从前端查询它,这取决于用户的选择?
  2. 每个车牌/汽车和年份都有一个新行,并且只在前端显示当前年份?

标签: mysqlsqldatabasedatabase-design

解决方案


首先,您需要确定要存储的数据的粒度是多少:这里是年、月级别的里程数。因此,您可以相应地决定表结构和粒度。

您需要标准化为不同的表。

  • 年表(年)
  • 月表(MonthId,MonthName,QuarterName)

  • LicensePlate 表(LicensePlateId,LicensePlateName)

  • 里程表(LicensePlateId, Year, MonthId, Milage)

您现在可以推导出车牌在特定年份和月份的里程数。您可以在需要时在季度级别聚合值。

注意:您可以将年、月信息合并到单个 calendarMonthTable(CalendarId, Year, Month, MonthName, QuarterName) 中,该表也是月级别的粒度。


推荐阅读