Skip to content

Latest commit

 

History

History
23 lines (14 loc) · 1.11 KB

cheap-many-to-many.md

File metadata and controls

23 lines (14 loc) · 1.11 KB

Cheap many-to-many

There are two common ways to establish a many-to-many relationship:

  1. has_and_belongs_to_many
  2. has_many, :through

Both require a join table, and the second requires a little more setup than the first bit is more future-proof.

A third alternative is so simple it sounds dumb: simply add a JSON column to the parent that contains an array of child IDs. If you understand the constraints of this approach and your use case doesn't need them, it can be a flexible and noncommittal way to model relationships.

Downsides

  • No guarantee of data integrity (can have orphaned IDs, no dependent: destroy, etc.).
  • Cannot access list of parents from child (can't see who a model belongs to).
  • Worse performance (or, at least, unmanaged performance).

Advantages

  • Very noncommittal. When working with uncertainty, it's good to be as flexible as possible until you are sure of requirements. Creating a table is very committal.
  • Automatic transactions. Simply update the parent record without needing to worry about data inconsistency.
  • Can easily migrate to a true join-table based relationship.