[openstack-dev] [oslo.db] Proposal: Get rid of deleted column
Chris Behrens
cbehrens at codestud.com
Mon Aug 19 07:56:29 UTC 2013
'deleted' is used so that we can have proper unique constraints by setting it to `id` on deletion. This was not the case until Grizzly, and before Grizzly I would have agreed completely.
- Chris
On Aug 19, 2013, at 12:39 AM, Jay Pipes <jaypipes at gmail.com> wrote:
> I'm throwing this up here to get some feedback on something that's always bugged me about the model base used in many of the projects.
>
> There's a mixin class that looks like so:
>
> class SoftDeleteMixin(object):
> deleted_at = Column(DateTime)
> deleted = Column(Integer, default=0)
>
> def soft_delete(self, session=None):
> """Mark this object as deleted."""
> self.deleted = self.id
> self.deleted_at = timeutils.utcnow()
> self.save(session=session)
>
> Once mixed in to a concrete model class, the primary join is typically modified to include the deleted column, like so:
>
> class ComputeNode(BASE, NovaBase):
> <snip>...
> service = relationship(Service,
> backref=backref('compute_node'),
> foreign_keys=service_id,
> primaryjoin='and_('
> 'ComputeNode.service_id == Service.id,'
> 'ComputeNode.deleted == 0)')
>
> My proposal is to get rid of the deleted column in the SoftDeleteMixin class entirely, as it is redundant with the deleted_at column. Instead of doing a join condition on deleted == 0, one would instead just do the join condition on deleted_at is None, which translates to the SQL: AND deleted_at IS NULL.
>
> There isn't much of a performance benefit -- you're only reducing the row size by 4 bytes. But, you'd remove the redundant data from all the tables, which would make the normal form freaks like myself happy ;)
>
> Thoughts?
>
> -jay
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
More information about the OpenStack-dev
mailing list