你可以保存在一個表中的信息,以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)
這單表解決方案的好處是,你的統計數據可以全部通過查詢一個表和分組依據將很好地滾了一切可以找到。
您也可以使用單獨的表格方法,但將它們的視圖放在一起。這仍然允許上面的問題,但將數字放在多個層面。
您將如何處理只有高級數據的情況?在這種情況下,計算不起作用。 – 2009-05-20 19:22:59