Last week Peter Harkins wrote about Rules of Database Aging. What especially caught my eye was the second rule:
All Relationships Become Many-to-Many
...
The modern database paradigm is defined by relations, so of course that’s what falls apart as soon as you get an app into production.
Pinderkent adds his reflections in the blog post Most real-world relationships are truly many-to-many, where he also suggests a way to handle this:
One option that should be considered is treating all relationships as many-to-many. Although it brings in a level of complexity, it can help avoid the after-the-fact database-level hacks that are often necessary to allow for such relationships to be stored. Arguably, the hacks are worse than the complexity brought in by always dealing with many-to-many relationships.
Other than this, you'll find many comments over at Hacker News.
To set things straight from the beginning, I'd like to say that relationships are not really native to "relational databases", how strange it may seem to you! In fact, these databases are set based, and what you store in the database is keys, not relationships. Actually you define the relationships in the queries, not in the database itself. Foreign key constraints are just a way to check for the existence of keys, nothing else.
What's interesting with the debate on one-to-many relationships becoming many-to-many relationships is that it highlights how "relational databases" handle relationships: they just don't! You have to do it yourself, more or less manually. And that's where the pain comes.
So my take on the suggestion from Pinderkent, making all relationships many-to-many from the start, would be: use a better abstraction of data which includes relationships natively as the set based one doesn't really do this. One way to go is to use a graph database such as Neo4j. The primitives of a graph database are nodes and relationships (edges). This way, you actually have relationships in your databse, and going from one-to-many to many-to-many doesn't imply any changes to the database at all. You only have to change your application; the database will let you add relationships as needed. In this case, relationships are defined when storing data, not on retrieval.
My conclusion is that the problem is not so much aging databases, but aging database concepts. Today many new ways of thinking is popping up in this area, and I think that's a very good thing.