Summary
In this chapter, you learned that database design is probably the most important part of your application. You've learned important database principles such as only storing information that is actually needed, and when to use a denormalized design. You've learned to take advantage of database features such as functions, triggers, constraints, and unique indexes. You've learned some differences between popular Ruby libraries for database modeling, and some principles for choosing the library that is best for your application. Finally, you've learned how to handle database and model errors in your application. With all of the information you've learned, you are now better able to design an appropriate data storage layer for your application.
In the next chapter, you'll learn important principles for designing your web application at levels above the database.