Relational vs Non-Relational Database for Events Database

This seems a little outside the scope of a StackExchange question. However.....

NoSQL databases are, typically, build to resolve specific issues with the relational model. The most common issue addressed is scalability. However, because they're all designed to address different aspects of certain problems that some applications have with the relational model, there really isn't something you can say about all of them as a whole. Maybe you need to handle terabytes of data? Or maybe you need to handle a data schema that is very dynamic across the board and an EAV type schema would just kill performance? Maybe you want a data store that cares about availability more than consistency (see CAP theorem)? Each one is good at something that could be wildly different from what another is good at, while an RDBMS is a much more generalized database.

The answer I hear from people I trust on this topic is that if you don't already know why you need to abandon a traditional RDBMS for NoSQL, then you almost certainly should stick to an RDBMS. There's a reason it took 30 years before people began to seriously consider data store models beyond the RDBMS. If your queries are requiring features not available in MySQL/MariaDB, you may wish to consider another RDBMS that has a more robust feature set. That could be PostgreSQL, or Oracle, or MS SQL Server.

Your proposed schema here already suits the relational model fairly well. You may need a few junction tables for many-to-many relationships, but I don't think you necessarily will see many of those. If you properly size the DB, properly index your tables, and analyze your common queries -- things you have to do with NoSQL, too -- I don't see that you'd have a huge problem. You may even be able to get away with views for the most common queries.


Basically you a bunch of options here.

  1. Relational
  2. Non-relational
  3. Hybrid (basically relational data with some extended data in a non-relational form, like XML or the like).

Your initial discussion suggests that your data is essentially tabular so a relational model is naturally fits your data.

The second point to keep in mind is that the relational model is well defined mathematically, which helps you repurpose data later for analytics you may not have thought about now.

One of the promises of non-relational models however is a better API. I would suggest that relational models can be encapsulated through a stored procedure interface of you focus on discoverability which can be loosely coupled with your application. You haven't mentioned PostgreSQL but I have written a fair bit on ways to do this on my blog. The first to read is http://ledgersmbdev.blogspot.com/2011/10/introduction-to-soda.html


The question, "relational or not" is based on a false assumption that the two are somehow comparable. They are not. The question you're asking might be more constructively phrased as, Should I use a DBMS based on math and logic, one that supports transactions and provides provably correct results, or should I build my own?

Here's a metric for you: if you're not processing millions of transactions per second or adding terabytes of data per day, you're probably not in No-SQL territory. When you get to problems on that scale, it becomes worth it to your employer to pay you to cobble together something very specific to deal with an outsize need. Short of that, likely is $50,000 in hardware will run any SQL DBMS you care to name very quickly, saving gobs of time and money, with greater assurance of correct results and reliable operation.