[英]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”等都是生成的列,目前沒有問題。
但是,將當前年份的里程保存到下一年的最佳做法是什么?
首先,您需要確定要存儲的數據的粒度是多少:這里是年、月級別的里程數。 因此,您可以相應地決定表結構和粒度。
您需要標准化為不同的表。
月表(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.