我正在用Sqlite設計一個數據庫,旨在幫助爲FIRST機器人大賽創建預測算法。從表面上看,事情看起來很容易,但我正在努力解決一個問題:如何存儲團隊過去的評級。我查看了以前關於如何存儲歷史數據的問題,但我不確定這些問題對我的情況是否適用(儘管可能肯定是我對此不太瞭解)。什麼是存儲歷史數據的正確數據庫結構?
每個球隊都有個人評分,並且在每場比賽之後,球隊參與評分都會得到修正。現在,我可以通過幾種方式來存儲它們,但沒有一個看起來特別好。我會通過我想過的那些,沒有特別的順序。
選項1:
每支球隊都有它自己的table.It將包括match_id和之後的比賽做了,之前可能可能還包括評級的評級。問題是,會有10,000張桌子接壤。我非常確定這是低效率的,特別是考慮到我認爲它也沒有標準化(糾正我,如果我錯了)。
表名:TEAM_ID
match_id | rating_after
選項2:
每隊歷史得分等級或存儲在匹配表,和額定電流存儲在球隊表。球隊表的簡化版本是這樣的:
表:TEAM_LIST
team_id | team_name | team_rating
這並不是真正的問題,問題是與歷史數據。歷史數據將與比賽一起存儲。有可能,這將是每場比賽之前的比賽評分。
我與這個問題有關的問題是,搜索的難度是多大,以找到以前的評級。這來自FRC如何工作的結構。每隊有3支球隊(組成所謂的聯盟),共有6支球隊。 (這些聯盟通常用紅色和藍色來表示) 這些聯盟是提前隨機分配的,可以包括任何一方在比賽中的任何球隊。)換句話說,比賽表看起來像這樣(簡化) :
表:match_table
match_id | Red1 | Red2 | Red3 | Blue1 | Blue2 | Blue3 | RedScore | BlueScore | Red1Rating | Red2Rating | etc.....
所以每個團隊必須包括在比賽的信息,以及爲每個團隊的評級。如果要創建多個評級(例如,我希望進行純比較測試的更新評級設計),事情可能會非常快地堵塞。
爲了找到團隊#67的先前評級,例如,我必須搜索Red1,Red2,Red3,Blue1等,然後查看與該位置有關的列,確定這確實是最近的比賽。
注意:這可能涉及不僅知道數據的年份,數據的一週(我會從一個事件表中獲取這個數據),而是匹配級別(無論是資格還是季後賽) ),並匹配#(不是match_id)。
當然,這個選項是標準化的,但它也有一個奇怪的搜索模式,從前端的角度來看並不容易(我可能會爲將來的某些數據構建一個前端,所以我想也要記住這一點)。
我的問題:有沒有更容易/更有效的選項,我失蹤了?
因爲兩種設計都感覺效率不高。第一個表格太多了,另一個表格會有超過10萬個條目,並且必須以複雜的模式進行搜索。我感覺好像有一些簡單的設計解決方案,我根本沒有想到。
選項1是可怕的,不會縮放,並將是一個噩夢來查詢。選項2是朝着正確方向邁出的一步,但我認爲您可以通過減少列數來進一步規範化它,並添加時間戳列。 –