# Stage 2: multi-user support
Supporting multiple users in the context of this application means that our app should know who has watched which movie.
At the moment our movies table looks like this:
title | release_timestamp | watched |
---|
The watched
column is an indicator as to whether we've watched the movie or not. But we have no way of storing who has watched the movie.
When you encounter this problem, usually the solution is to separate the two related sets of data: movie information and watcher information. This improves atomicity.
Atomicity
The separation of data into smaller and smaller pieces until each piece of data cannot be separated further while still holding meaning on its own.
Let's implement a solution that many students would attempt next. It is not a perfect solution but it will show us more about SQL and also about the thought process you want to avoid when developing something like this.
Since we already have most of the code, implementing this imperfect solution won't take long!
# Two tables
Our imperfect solution will make use of two tables: movies
and watched
.
The movies
table will look like this:
title | release_timestamp |
---|
And the watched
table will look like this:
movie_title | watcher_name |
---|
What we'll do is store our movies in the movies
table, and when someone watches a movie we'll delete it from the movies
table and add it to the watched
table, together with the person's name.
Clearly this still has problems:
- Every time someone watches a movie, we lose movie data from the
movies
table; and - If two people want to watch the same movie, it has to be added twice to the
movies
table.
However this solution is a great step toward our final solution. Let's implement it and learn some new SQL while we do it. First step: learning how to delete rows!