簡體   English   中英

在當前表中保存去年的值

[英]Save value from last year in current table

這是關於數據庫設計的更普遍的問題。 我目前正在將 Excel/VBA 程序遷移到 SQL 並遇到以下情況,我需要深思熟慮,因為我是第一次這樣做。

excel中的現狀: excel表

到目前為止的新 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. 每個車牌/汽車和年份都有一個新行,並且只在前端顯示當前年份?

首先,您需要確定要存儲的數據的粒度是多少:這里是年、月級別的里程數。 因此,您可以相應地決定表結構和粒度。

您需要標准化為不同的表。

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

  • LicensePlate 表(LicensePlateId,LicensePlateName)

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

您現在可以推導出車牌在特定年份和月份的里程數。 您可以在需要時在季度級別聚合值。

注意:您可以將年、月信息合並到單個 calendarMonthTable(CalendarId, Year, Month, MonthName, QuarterName) 中,該表也是月級別的粒度。

數據庫是數據的持久存儲。 在格式化方面,不要認為數據庫具有電子表格的強大功能; 那是前端。

“到目前為止沒問題”——錯誤。

不要跨列放置一系列事物。 相反,每個月有一行。

通常最好在客戶端進行格式化,而不是 SQL。 但是可以“轉動”將月份放在 output 上。

應該計算總計和小計,而不是存儲。

“每個...的新表”——幾乎總是一個糟糕的架構設計。 StackOverflow 上的許多問題都在問這個問題; 答案總是一樣的:“不”。

“每個車牌/汽車和年份的新行,只顯示當前年份”——這可以在 SQL(稍微復雜)或前端處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM