InterviewDB Question

Table Operations: Implement a Lightweight In-Memory Table with Insert, Delete, and Query Operations

Question Details

Problem

Implement an in-memory database table that supports:
- insert(row: dict) -- add a row (rows have a unique id field).
- delete(id) -- remove a row by id.
- query(filters: dict) -> list[dict] --

return all rows matching all key-value filters (AND semantics).
- update(id, changes: dict) -- update specific fields of a row.

python
class Table:
    def insert(self, row: dict) -> None: ...
    def delete(self, id: int) -> None: ...
    def query(self, filters: dict) -> list[dict]: ...
    def update(self, id: int, changes: dict) -> None: ...

Example:

t.insert({"id":1,"name":"Alice","dept":"Eng"})
t.insert({"id":2,"name":"Bob",  "dept":"Eng"})
t.query({"dept":"Eng"}) -> [{"id":1,...},{"id":2,...}]
t.update(1, {"dept":"PM"})
t.query({"dept":"Eng"}) -> [{"id":2,...}]

Follow-ups
1. query scans all rows. How would you add an index on a specific column to speed up equality lookups?
2. Support range queries (age > 30). What data structure would you use for a range index?
3. How do you handle schema evolution -- adding a new column to existing rows?
4. Implement query with OR semantics as well as AND. How does the filter language change?

Full Details

Problem

Implement an in-memory database table that supports:
- insert(row: dict) -- add a row (rows have a unique id field).
- delete(id) -- remove a row by id.
- query(filters: dict) -> list[dict] --

return all rows matching all key-value filters (AND semantics).
- update(id, changes: dict) -- update specific fields of a row.

python
class Table:
    def insert(self, row: dict) -> None: ...
    def delete(self, id: int) -> None: ...
    def query(self, filters: dict) -> list[dict]: ...
    def update(self, id: int, changes: dict) -> None: ...

Example:

t.insert({"id":1,"name":"Alice","dept":"Eng"})
t.insert({"id":2,"name":"Bob",  "dept":"Eng"})
t.query({"dept":"Eng"}) -> [{"id":1,...},{"id":2,...}]
t.update(1, {"dept":"PM"})
t.query({"dept":"Eng"}) -> [{"id":2,...}]

Follow-ups
1. query scans all rows. How would you add an index on a specific column to speed up equality lookups?
2. Support range queries (age > 30). What data structure would you use for a range index?
3. How do you handle schema evolution -- adding a new column to existing rows?
4. Implement query with OR semantics as well as AND. How does the filter language change?

About This Question

This is a reported interview question from a airtable interview during the phone round.

It covers the following topics: Coding, Sql, Phone, Onsite .