With zero experience designing non-relational databases (Azure Storage Tables, to be specific), I'm having trouble coming up with a good design to store the data for my application.
The application is really simple. It is basically a multi-user To-Do list:
User selects a "Procedure".
User gets presented with webpage with several checkboxes.
User starts checking checkboxes.
Each check/uncheck gets stored in the DB.
For example, let's say that we have a procedure to obtain Milk:
Procedure 1 - How to obtain Milk:
[_] Step 1 - Open fridge
[_] Step 2 - Get Milk
[_] Step 3 - Close fridge
Alice decides to execute this procedure, so she creates a new execution and starts checking checkboxes:
Procedure 1, Execution 1:
Executor(s): Alice
[X] Step 1 - Open fridge
[X] Step 2 - Get Milk
[_] Step 3 - Close fridge
Bob, also decides to execute this procedure, but not together with Alice. So, Bob creates a new execution. Charlie, on the other hand wants to help Bob, so instead of creating a new execution he joins Bob's execution:
Procedure 1, Execution 2:
Executor(s): Bob, Charlie
[_] Step 1 - Open fridge
[X] Step 2 - Get Milk
[_] Step 3 - Close fridge
In summary, we can have multiple procedures, and each procedure can have multiple executions:

So, we need a way to store procedures (a list of checkboxes); executions (who, when, checkboxes states); and the history of checks/unchecks.
This is what I have come up with so far:
- Create three tables: Procedures, Executions, Actions.
- The Procedures table stores what checkboxes are there in each procedure.
- The Executions table stores who and when initiated the execution of a Procedure, and the checkboxes states.
- The Actions table stores every checkbox check and uncheck, including who and when.
I'm not too happy with this approach for a number of reasons. For instance, every time a user clicks on a checkbox we need to update the Executions table row and insert a new row into the Actions table at the same time. Also, I'm not sure if this design will scale for a really large number of Procedures, Executions, and Actions.
What would be a good way to store this data using Azure Storage Tables, or a similar NoSQL store? How would you go about designing this database? And, how would you partition the data (row keys, partition keys)?