我正在研究跟蹤和處理工單/門票的應用程序。每張票都鏈接到通過級聯MySQL中的任何更改的外鍵創建/擁有票的用戶。顯然,如果用戶由於某種原因曾經刪除他們的賬戶,我們仍然希望記錄他們的門票和他們的基本信息。存儲已刪除用戶數據的最佳方法?
實現這個想法的第一種方法是在用戶表中有一列表示它們是處於活動狀態還是非活動狀態,即是否已刪除。這樣當他們關閉/刪除他們的賬戶時,他們只是翻轉這個值,然後無法訪問應用程序。
我的另一個想法是當賬戶被刪除時,將用戶記錄移到已刪除的用戶表中。通過這種方式可以將用戶表的性能保持在最佳狀態,這在增大時可能是一筆巨大的交易,但會增加額外的查詢來移動記錄。
顯然這部分可以是首選項,但我對性能方面感興趣。本質上,問題是選擇查詢與插入查詢相比如何,以及在什麼時候通過將插入查詢(將記錄移動到已刪除的用戶表)添加到混合中來提高總體性能?
我的意思是數百萬當我說大。我對「物化視圖」並不瞭解,因爲(我確信這很明顯),我不是一個真正的數據庫人員。但是,這聽起來像是我應該研究的東西。 我知道每個查詢都需要最少量的資源和時間作爲基準,並且我認爲使用它可以計算何時添加額外的查詢會對整體有利。 無論如何,很好的答案,謝謝。 – 2011-12-21 18:36:47
「你可以計算何時添加額外的查詢會對整體有利」。你無法計算它。由於數據庫設計和實現的各種自由度,這幾乎是不可能的。您只能對您的設計和實施選擇進行實證研究。 – 2011-12-21 18:48:50
* is_deleted *列的一個令人討厭的缺點是你不能完全使用UNIQUE鍵,除非你把NULL放在它裏面而不是TRUE。 – 2015-12-11 14:08:28