Relational Database Models Vs. Entity Models
I wrote some time back in February Shifting Away From Tables To Entity Models discussing about fast adoption of Entity models for highly scalable systems moving away from RDBMS modeling and RDBMS databases.
DataStore (based on Google’s Big Table) in Google App Engine is an excellent contrast between these two models.
RDBMS relational data management systems, simply put, most Database systems allow us to create data models of businesses in terms of rows and columns in a table. Tables can be ‘related’ to indicate dependencies of data between tables. RDBMS was on the best things that ever happened to software abstractions. Every business domain has been modeled to be a set of tables and relations between them.
However, recently another paradigm is taking shape (at least, I only noticed it in the last year), called as Domain Driven Development, DDD for short, that emphasizes the importance of modeling a business in the domain of the business itself rather than dictated by abstractions tied to tables. DDD clout calls them “Entities” (not Tables). In certain ways, I read this shift from RDBMS to Entity model as “shift from horizontal (table) abstractions to hierarchical (entity) abstractions”.
I found some similar discussion on ReadWrite Enterprise Is the Relational Database Doomed? discussing much more comprehensively about the fallout of RDBMS towards Cloud based (Entity Model) databases.
As Google explained the reason of ‘scalability’ that led them to design Big Table, the author of this article also believe scalability is prime reason that may sway us to move away from RDBMS.
Relational databases scale well, but usually only when that scaling happens on a single server node. When the capacity of that single node is reached, you need to scale out and distribute that load across multiple server nodes. This is when the complexity of relational databases starts to rub against their potential to scale. Try scaling to hundreds or thousands of nodes, rather than a few, and the complexities become overwhelming, and the characteristics that make RDBMS so appealing drastically reduce their viability as platforms for large distributed systems.
Cloud databases like Google App Engine force a different modeling of your databases, for scalability. So I guess, best way to learn is to develop an app on Google App Engine.