Constraints allow us to use underlying relational database features to help us maintain database integrity. For example, let’s validate our categories. When we create a video, we need to make sure that our category exists. We might be tempted to solve this problem by simply performing a query, but such an approach would be unsafe due to race conditions. In most cases, we would expect it to work like this:
- The user sends a category ID through the form.
- We perform a query to check if the category ID exists in the database.
- If the category ID does exist in the database, we add the video with the category ID to the database.
However, someone could delete the category between steps 2 and 3, allowing us to ultimately insert a video without ...