[katello-devel] Katello schema - documentation and questions
Miroslav Suchy
msuchy at redhat.com
Fri Jul 27 08:14:21 UTC 2012
While working on APIDocumentationEfforts [1] I wanted some nice
documentation of our schema. I find we have none, so I created one:
http://miroslav.suchy.cz/katello/katelloschema.html
It is created by PostgreSQL Autodoc [2].
To my surprise it does not contain foreign keys and very few indexes.
First I thought it is bug in Autodoc. But then - to my horor - I find it
is not bug. We do not have foreign keys and indexes on most tables!
So we have two issues.
1) Indexes:
E.g. table user_notices, which purpose is IMHO always to live between
two JOINS and is school example where indexes should be used, do not
have indexes.
I can go through schema and suggest where we should create indexes.
I do not expect that it would cause any problem.
Objections here?
2) Foreign keys:
I read about foreign keys and ruby and I learned that community around
Rails think that application level is best/enough to keep data
consistency. So I expect a lot of discussion here.
Let me share my point of view here:
IMO data consistency should be work of database engine.
There are two examples:
a) when our code is fatally interrupted. E.g.
src/app/models/glue/pulp/repo.rb:
def destroy_repo_orchestration
pre_queue.create(:name => "remove product content : #{self.name}",
:priority => 1, :action => [self, :del_content])
[.. FATAL CRASH HERE ...]
pre_queue.create(:name => "delete pulp repo : #{self.name}",
:priority => 2, :action => [self, :destroy_repo])
end
You will end up with repository with product id, which does not exist.
Foreign keys with ON DELETE CASCADE solve this.
b) But even if we solve all issues in our code (e.g start using
transactions), there is problems with humans.
During my 5 years in RHN Satellite team I seen non trivial numbers of
Customers issues, where either customer or even TAM(!) run directly SQL
commands, which without foreign keys would result in inconsistent database.
Using foreign keys seems doable:
https://github.com/matthuhiggins/foreigner
https://github.com/jenseng/immigrant
So it should be basically two gems, few lines of code and some testing.
Your opinions?
[1] https://fedorahosted.org/katello/wiki/APIDocumentationEfforts
[2] http://www.rbt.ca/autodoc/ (available in Fedora as package)
Mirek
More information about the katello-devel
mailing list