Soft delete pattern concept in SQL - Time & Space Complexity
We want to understand how the time to find active records changes as the data grows when using soft delete.
How does marking records as deleted affect query speed?
Analyze the time complexity of the following SQL query using soft delete.
SELECT *
FROM users
WHERE deleted_at IS NULL;
This query selects all users who are not marked as deleted by checking if the deleted_at column is null.
Look at what repeats when the query runs.
- Primary operation: Scanning the users table rows to check the deleted_at column.
- How many times: Once for each row in the users table.
As the number of users grows, the query checks more rows.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks of deleted_at |
| 100 | 100 checks of deleted_at |
| 1000 | 1000 checks of deleted_at |
Pattern observation: The number of checks grows directly with the number of rows.
Time Complexity: O(n)
This means the query time grows in a straight line as the table gets bigger.
[X] Wrong: "Soft delete makes queries faster because deleted rows are ignored."
[OK] Correct: The query still checks every row to see if it is deleted or not, so it does not skip work automatically.
Understanding how soft delete affects query time helps you explain real database design choices clearly and confidently.
"What if we add an index on the deleted_at column? How would the time complexity change?"
Practice
soft delete pattern in databases?Solution
Step 1: Understand soft delete concept
Soft delete means we do not remove data but mark it as deleted.Step 2: Compare options
Only Marking data as deleted without actually removing it from the table describes marking data instead of removing it.Final Answer:
Marking data as deleted without actually removing it from the table -> Option AQuick Check:
Soft delete = Mark data deleted, not remove [OK]
- Thinking soft delete removes data physically
- Confusing soft delete with backup
- Assuming encryption is part of soft delete
Solution
Step 1: Identify common soft delete column
The most common column is a boolean namedis_deletedto mark true/false.Step 2: Check other options
Other columns can be used butis_deleted BOOLEANis standard and simplest.Final Answer:
is_deleted BOOLEAN -> Option BQuick Check:
Soft delete uses boolean flag = is_deleted [OK]
- Using timestamp instead of boolean for soft delete
- Choosing vague column names
- Confusing soft delete with audit columns
users with a boolean column is_deleted, what will this query return?SELECT * FROM users WHERE is_deleted = FALSE;
Solution
Step 1: Understand the WHERE clause
The query filters rows whereis_deletedis FALSE, meaning not deleted.Step 2: Determine returned rows
Only users not marked deleted will be returned, excluding soft deleted rows.Final Answer:
Only users not marked as deleted -> Option AQuick Check:
WHERE is_deleted = FALSE returns active users [OK]
- Thinking it returns deleted users
- Assuming syntax error due to boolean
- Confusing TRUE and FALSE values
SELECT * FROM users WHERE is_deleted = 0;
But it returns no rows even though some users are active. What is the likely problem?
Solution
Step 1: Check data type of is_deleted
Ifis_deletedis BOOLEAN, it expects TRUE/FALSE, not numeric 0/1.Step 2: Understand why query returns no rows
Using 0 may not match FALSE in some SQL dialects, causing no rows returned.Final Answer:
The column is_deleted uses TRUE/FALSE, not 0/1 -> Option DQuick Check:
Boolean columns need TRUE/FALSE, not 0/1 [OK]
- Assuming 0 equals FALSE in all SQL dialects
- Ignoring data type of column
- Thinking syntax error causes no rows
products table. Which SQL statement correctly marks a product as deleted without removing it?Solution
Step 1: Understand soft delete update
Soft delete means updating a flag, not deleting the row.Step 2: Analyze each option
UPDATE products SET is_deleted = TRUE WHERE product_id = 10; updatesis_deletedto TRUE for product 10, marking it deleted.Final Answer:
UPDATE products SET is_deleted = TRUE WHERE product_id = 10; -> Option CQuick Check:
Soft delete uses UPDATE to mark deleted [OK]
- Using DELETE instead of UPDATE
- Trying to INSERT to mark deleted
- Using SELECT instead of modifying data
Ready to prove it?
Pass the test and this pattern moves unknown
