[openstack-dev] [oslo.db] Proposal: Get rid of deleted column
Jay Pipes
jaypipes at gmail.com
Mon Aug 19 07:39:50 UTC 2013
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
More information about the OpenStack-dev
mailing list