我創建一個小型的數據庫,管理員將能夠購買模塊分配給用戶。此外,管理員將能夠從模塊中取消分配用戶(放棄該許可證),並將其他用戶重新分配給該模塊。我還想記錄這些作業的日誌,以便查看這些更改的發生頻率。數據庫設計和SQL語句速度
我的一個選擇是有型的一個表:
User_Licenses(user_license_id, user_id, module_id, date_from, date_to)
其中DATE_TO保持空白的活躍用戶。這意味着,爲了看用戶是否有訪問該模塊我不得不請與:
SELECT user_id FROM User_Licenses
WHERE user_id = 1
AND module_id = 1
AND date_from <= TODAY
AND date_to = NIL
我的另一種選擇是有2個表類型:
User_Licenses(user_license_id, user_id, module_id, active_user_log_id)
Active_User_Log(active_user_log_id, date_from, date_to)
哪裏每次分配新許可證時,我都會創建一個日誌條目,並在每次未分配許可證時更新date_to字段。
現在我明白了,他們基本上是相同的事情,與第二個選項多一點編程的開銷,還沒有檢查用戶是否有權訪問我只知道一個模塊都做:
SELECT user_id FROM User_Licenses
WHERE user_id = 1
AND module_id = 1
並且日誌在邏輯上與「每日檢查」分開
我想知道的是什麼是更常用的,以及第一個SQL語句對第二個SQL語句的慢多少。
這是一個Web應用程序,用戶數量可能不會超過100,並且模塊的變化在用戶的任務應該是最小的。對模塊的訪問檢查將每天進行,用戶將被分配到多個模塊。
在此先感謝您的幫助。
在這兩種情況下,活躍用戶對我來說都很重要,只是在第一種情況下才會提到。 User_Log就在那裏,因爲每個用戶都有各種模塊的許可證(基於每個模塊),如果他不需要一個月,他可以「放手」並重新購買它接下來的一個月。我需要日誌來確保不共享許可證。至於這個建議,由於速度不會是一個主要因素,我認爲2表方法更好,因爲我更願意保留特定於實體的表的內容。感謝您的建議:D –