• The object/relational mapping problem is hard

  • you either have to make your in-memory model more relational, or you complicate your mapping code

  • it’s reasonable to have a more relational domain model to simplify your object-relational mapping

  • To avoid the mapping problem you have two alternatives. Either you use the relational model in memory, or you don’t use it in the database.

  • To use a relational model in memory basically means programming relations

  •  I think NoSQL is serious technology. If you have an application problem that maps well to a NoSQL data model - such as aggregates or graphs - then you can avoid the nastiness of mapping. Indeed this is often a reason I’ve heard teams go with a NoSQL solution.