For those who have
Parent has_many :children Child
Can there be any reason an overseas key on Child (to Parent) along with a corresponding
belongs_to :parent is probably not desirable?
When, when, can you not need your son or daughter to have the ability to access its parent?
It is a trade-off. The typical argument against foreign secrets would be that the index for any foreign key incurs some performance overhead on place/update/remove. As with every index.
But a catalog also gives significant advantage whenever you search via that column.
SELECT * FROM Child WHERE parent_id = :id
Also don't underestimate the overhead of trying to find orphaned children and cleaning bollixed references, what are inevitable results of omitting foreign key constraints.
-- Typical chore: searching for orphaned child rows. SELECT c.* FROM Child c LEFT OUTER JOIN Parent p ON (c.parent_id = p.parent_id) WHERE p.parent_id IS NULL;
You will find several database designs that you can't use foreign secrets, for example Polymorphic Associations or Entity-Attribute-Value. However these designs are anti-designs themselves.
Performance. There's an expense when placing a young child record to find out if there's a parent or gaurdian record. You are able to still access parents record (presuming you've got a parentID column within the child table, just no referential integrity).