2009-05-20 44 views
1

我正在做一個數據模型的滾輪德比聯賽跟蹤他們的比賽。我追蹤像圈速,每圈罰球,每段罰球和每場比賽罰球等事情。數據建模與詳細程度,其中一些缺席

問題是,在某些情況下,我只會有整體數據;對於一場比賽我可能會有「每場比賽的罰球」,另一場比賽可能會有「每個時段的罰球」。因此,在最低級別,對於一些比賽,我會得到非常詳細的數據(每次罰球點數),而在最高級別,我會對每場比賽進行處罰。

我不知道如何建模/使用它來做報告,當我沒有一些記錄的高細節。我想過這樣的事情:

PenaltiesPerMatch MatchID PenaltyCount

PenaltiesPerPeriod MatchID PeriodID PenaltyCount

PenaltiesPerLap MatchID PeriodID 拉彼德 PenaltyCount

但我擔心的是,更高層次的信息可以從更低層次推導出來。我是否重複記錄(例如,填寫記錄以查看每個時間段的處罰數據,同時處於每圈處罰數據,按期間累計?)或保存唯一記錄(不要對每個時段處理我已經處罰的數據的處罰每圈;按期計算)。

回答

2

我會做的就是記錄您擁有的信息。對於某些比賽,請詳細記錄它們,爲其他細節記錄。

當你在比賽報告:

  • 計算每場比賽的資金用於高細節的匹配
  • 使用從低細節每場比賽的總和相匹配的

存儲數據您擁有的最低細節級別;計算更高的細節水平。

+0

您將如何處理只有高級數據的情況?在這種情況下,計算不起作用。 – 2009-05-20 19:22:59

0

我認爲這取決於哪些信息對客戶有價值。如果他們想按時間段收集信息,那麼您應該將其作爲單獨的記錄加入。按期間和按比賽的罰分必須分開。

我你總是受到週期信息的懲罰,那麼你可以做一個總結數據的查詢。

如果你的月經總是一個固定的號碼,那麼你很可能只是做兩列在表中,而不是一個新表來保存期間信息

1

你可以保存在一個表中的信息,以NULL值表明你沒有把數據降到這個水平。您將無法將主鍵放在該鍵上,因此您需要代理鍵,但您應該可以使用唯一的約束。

例如:

這個對我沒有看到一個簡單的解決方案卻又是如何實施,他們只能在一個級別上進入懲罰
CREATE TABLE PenaltyCounts 
(
    penalty_count_id INT NOT NULL, 
    match_id   INT NOT NULL, 
    period   TINYINT NULL CHECK (period BETWEEN 1 AND 3), 
    lap    SMALLINT NULL, 
    penalty_count SMALLINT NOT NULL, 
    CONSTRAINT PK_PenaltyCounts PRIMARY KEY NONCLUSTERED (penalty_count_id), 
    CONSTRAINT UI_PenaltyCounts UNIQUE CLUSTERED (match_id, period, lap), 
    CONSTRAINT CK_lap_needs_period CHECK (lap IS NULL OR period IS NOT NULL) 
) 

的一個問題。例如,他們仍然可以這樣做:

INSERT INTO PenaltyCounts (penalty_count_id, match_id, period, lap, penalty_count) 
VALUES (1, 1, NULL, NULL, 5) 
INSERT INTO PenaltyCounts (penalty_count_id, match_id, period, lap, penalty_count) 
VALUES (2, 1, 1, NULL, 3) 
INSERT INTO PenaltyCounts (penalty_count_id, match_id, period, lap, penalty_count) 
VALUES (3, 1, 2, NULL, 2) 

這單表解決方案的好處是,你的統計數據可以全部通過查詢一個表和分組依據將很好地滾了一切可以找到。

您也可以使用單獨的表格方法,但將它們的視圖放在一起。這仍然允許上面的問題,但將數字放在多個層面。