polymorphic_constraints icon indicating copy to clipboard operation
polymorphic_constraints copied to clipboard

For Postgres, use constraint triggers?

Open pjungwir opened this issue 7 years ago • 5 comments

I'm so glad that someone has already written a gem for this!

I was looking at your Postgres adapter code, and what do you think of using CREATE CONSTRAINT TRIGGER instead? That is how Postgres implements its own foreign keys, and it would let you do SET CONSTRAINTS on these like you can with regular foreign keys. It would require changing the triggers from BEFORE to AFTER, but that doesn't look like a problem to me.

Incidentally, you should technically have an UPDATE trigger on the same table as the DELETE trigger in case the primary key changes, although I understand that is unlikely to happen in a Rails app.

pjungwir avatar Sep 07 '18 16:09 pjungwir

I don't personally use this gem anymore. Polymorphism is an antipattern in database system design. We should use alternative solutions although they aren't very pleasant ones.

musaffa avatar Sep 07 '18 16:09 musaffa

Polymorphism is an antipattern in database system design.

I'm inclined to agree. :-) Still it is used by some handy gems, e.g. Rolify, and it would be nice to lock them down.

I don't personally use this gem anymore.

So do you mind if I fork it? I'm interested in adding database integrity to Rails projects. I wrote a gem myself for database constraints, and I've contributed to another. Forking would be a useful occasion for the change I've suggested here. I'd also like to update the gem for Rails 5.

pjungwir avatar Sep 07 '18 16:09 pjungwir

@pjungwir You can either fork it or I can add you as a maintainer of this gem.

musaffa avatar Sep 07 '18 16:09 musaffa

Okay, I'd be happy to help as a maintainer. That would be less disruptive for sure. Then for changing the constraint type we can just add a version bump.

pjungwir avatar Sep 07 '18 17:09 pjungwir

I've added you as a collaborator in this repository.

musaffa avatar Sep 07 '18 17:09 musaffa