Help with database planning

Ben Finney ben+python at benfinney.id.au
Sat Nov 14 08:23:48 EST 2009


Juliano <jjunho at gmail.com> writes:

> We've been working with an ontology at my department […] I have been
> being pushed towards changing the basic plan and build a DB so that
> data access will be faster and easier for both the desktop GUI and the
> web app. Right now, I'm trying to work with sqlite, since it can be
> used as a separate file for the GUI and as a DB for Django (which may
> be the choice for the web interface).

You're also working with a relational database system, which will make
it relatively easy to migrate your database structure to a different
relational database system if that proves necessary.

> I have been redaing some books on DBs but I kind of get stuck when it
> comes to the normalization and the planning of the tables.

No shame in that; it's somewhat counter-intuitive, though it's an
essential topic when working with databases. Try the Wikipedia article
<URL:http://en.wikipedia.org/wiki/Database_normalization>.

> The problem is that we have basically four fields that can be arranged
> in a tree- like structure.

Tree-like structures don't fit into table-like relations very well; but
it's not hopeless.

> So, for ONE *concept*, we have, usually, MANY *slots*, each *slot* has
> ONE *facet*, and each *facet* can have MORE THAN ONE *filler*.
> Besides, some *slots* and *fillers* are themselves *concepts*,
> creating a sort of recursive reference.

Recursive references, on the other hand, are deadly to storing data
sanely in a relational database: while recursion is algorithmically
elegant, it makes for hideously slow operations querying, and especially
modifying, the database.

The focus, then, should be on teasing out a non-recursive, declarative
schema for the data. This is a well-known problem, with many possible
solutions. Several popular approaches (each with different trade-offs)
are “Adjacency list” , “Materialized path”, and “Nested sets”. Use those
terms in database-savvy circles and you'll get lots of explanations.

> What would be a good way to create tables for this situation?
> In fact, this is the first time I've ever tried to create a DB, so I'm
> completely lost.

This topic is rather orthogonal to Python. You would do well to seek
further guidance from a Usenet group such as <URL:news:comp.databases>.
Good fortune, and persist; you're going into databases off the deep end
with a problem domain like this :-)

-- 
 \       “I distrust those people who know so well what God wants them |
  `\    to do to their fellows, because it always coincides with their |
_o__)                      own desires.” —Susan Brownell Anthony, 1896 |
Ben Finney



More information about the Python-list mailing list