If There's Any Chance of a HasMany, Don't Combine your Entities

March 25, 2022

Once upon a time, my User model and my Account model were one and the same under the User. There was no separate Account entity yet. One day, User decided he wanted to have multiple accounts, and so chose to split out Account into his own entity.

But seriously, this is something I did recently, and let me tell you—what a pain in the a** that was. Writing the migration file to

  • tease out an accounts table from the users table,
  • transferring some of the columns and their data,
  • creating the relationships,
  • and updating the other tables that had a relationship to the users table to now have a relationship to the accounts table

wasn’t even the hard part.

no thank you

When you start analyzing your codebase you start to realize, “I’m going to have to throw this entire thing in the garbage.”

Everything you wrote that uses the previous User relationship that is now related to the Account has to be rewritten. This is not a fun time. And if you haven’t written tests you’re in even bigger trouble. You’ll have to visit every page and test just about every action you’ve built thus far because chances are that it’s broken.

So as someone who has learned this lesson the hard way, do yourself a favor and assume that thing you’re combining into a single table is two separate things. Especially if there is even a 1% chance. You will save yourself a MASSIVE amount of grief, and live happily ever after.

Happy coding.