簡體   English   中英

使用更新和插入觸發器提供其他關系中的計數列

[英]Using update and insert triggers to provide a count column in other relations

我有一個表“ user_plays_track”,該表跟蹤用戶“播放”了曲目的次數。

我使用以下查詢來插入用戶播放的新曲目,或更新現有曲目的播放次數:

INSERT INTO user_plays_track
(user_id, track_id) VALUES (x,y) 
ON duplicate key UPDATE play_count = play_count+1

這是我的表的結構:

user_id  track_id  play_count
1        5         2
4        2         1
3        5         7

從這些信息中,我可以通過查找所有曲目計數的總和來推斷出諸如曲目播放的總次數或藝術家演奏的總次數之類的信息。

有了大約一千條記錄,這很快就會變得混亂,語義也不清楚。 我想做的是使用觸發器來產生可以描述為緩存的內容。

例如,當一條記錄被更新或插入到“ user_plays_track”中時,“ tracks”表將增加其play_count列,指示該軌道的所有用戶的播放總數。

track_id  artist_id   track_name  play_count
2         1           Hey         1
5         1           Test        9

進一步地,應該應用另一個觸發器來推斷新知識,例如藝術家演奏的總數。 添加新軌道時,將再次觸發此操作,它將找到該軌道所屬的artist_id並相應地更新“藝術家”表。

artist_id  artist_name play_count
1          Bob         10

當用戶“播放”曲目時,我將如何實現相關的觸發器,以提供總計的增量?

您想在查詢時計算的越多,就越需要視圖,計算出的列以及存儲或用戶例程。 您想要在標准化基准更新時計算的次數越多,則需要級聯和觸發器的次數就越多。 您希望在其他(計划的或臨時的)時間計算的內容越多,則使用快照(又稱為物化視圖)和更新的非規范化基礎的數量就越多。 您可以將它們結合起來。 每次訪問數據庫時,都可以通過存儲的例程或其他api啟用它並受其限制。

在顯示足夠的數據之前,視圖和計算的列是最簡單的。

DBMS的整個想法是將應用程序狀態的表示形式存儲為數據庫(通過規范化減少冗余),然后查詢並讓DBMS實施並優化答案的計算。 您尚未提出不以最直接的方式這樣做的理由。

暫無
暫無

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

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