On 08/20/2013 04:16 PM, Chris Behrens wrote:

On Aug 20, 2013, at 1:05 PM, Jay Pipes <jaypi...@gmail.com> wrote:

I see the following use case:

1) Create something with a unique name within your tenant
2) Delete that
3) Create something with the same unique name immediately after

As a pointless and silly use case that we should not cater to.

It's made the database schema needlessly complex IMO and added columns to a 
unique constraint that make a DBA's job more complex in order to fulfill a use 
case that really isn't particularly compelling.

I was having a convo on IRC with Boris and stated the use case in different 
terms:

If you delete your Gmail email address, do you expect to immediately be able to 
create a new Gmail email with the previous address?

If you answer yes, then this unique constraint on the deleted column makes 
sense to you. If you answer no, then the whole thing seems like we've spent a 
lot of effort on something that isn't particularly useful except in random test 
cases that try to create and delete the same thing in rapid succession. And 
IMO, those kinds of test cases should be deleted -- hard-deleted.


I would answer 'no' to the gmail question.  I would answer 'yes' depending on 
what other things we may talk about.  If we put (or maybe we have this -- I 
didn't check) unique constraints on the metadata table for metadata key… It 
would be rather silly to not allow someone to reset some metadata with the same 
key immediately.  One could argue that we just un-delete the former row and 
update it, however… but I think that breaks archiving (something*I'm* not a fan 
of ;)

Yeah, totally agreed. It's wrong to lump all entities into the same boat.

Some back-of-napkin thoughts...

We should take a look at look at the various entities in the various database schemata and ask the following questions:

1) Do we care about archival of the entity?

2) Do we care about audit history of changes to the entity?

3) Do we care about whether an entity with a unique name/key needs to be able to be deleted and immediately re-created with the same name/key?

For entities with "No" answers to #1 -- and I would suggest instance metadata might be one of these things... -- we could do hard-delete and hard-updates.

For entities with "Yes" answers to #1 and "No" answers to #2 and #3, we could use a simple periodic purge/archive process and leave deleted columns out of unique constraints on the tables

For entities with "Yes" answers to #1 and #2 and "No" answers to #3, we could use audit tables (note: not shadow tables, but audit tables, which record the changes made to entities over time) along with a periodic archival/purge process and leave the deleted columns out of unique constraints on the tables.

For entities with "Yes" answers to all three, we could use hard-delete in the main table along with audit tables and remove the deleted_at/deleted/created_at/updated_at from tables (since the entire history of the entity is contained in the audit table.

Thoughts?
-jay




_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to