[development] relationships API vs i18n

Jeff Eaton jeff at viapositiva.net
Fri Nov 10 15:46:45 UTC 2006


Robert Douglass wrote:
> The last few posts to this thread assume that we need to generalize the 
> API *and* generalize the storage table. A lightweight triples API could 
> take a table name as a starting parameter (with a sensible default, of 
> course), and then modules like the buddylist could add their own triple 
> table but still use the API.
> 
> So before we start pouring cement around our database foundation, lets 
> try to identify the types of functions we want in the API. Aside from 
> putting triples into the database and getting them out again, what 
> would, say i18n need?

Here are a couple of the priorities I came up with when I made my attempt:

1) Must be able to capture different relationship types. (Standard 
taxonomy terms used the 'describes' relationship type. Book pages used 
the 'child_of' relationship type.

2) Use an actual ID for each relationship. Currently, node/taxonomy 
intersections have no id, so it's impossible to hang other meta-data 
tables off of them.

3) Capture optional weight, so relationships can be ranked.

4) Capture an optional uid, so that relationships can be user-specific.

If we add to that the ability to break things out into custom tables for 
optimization purposes, the way cache tables work in 5.0, I think we have 
a real winner. My schema worked out to something like this:

----
rid int(10) NOT NULL auto_increment,
source_id int(10) NOT NULL default 0,
relationship_type text NOT NULL,
target_id int(10) NOT NULL default 0,
uid int(10) default NULL,
weight tinyint(3) NOT NULL default 0,
----

I also had a small .inc with helper functions in my sandbox. The real 
problem isn't, IMO, writing this kind of glue. It's converting the 
monsters like taxonomy over to the new schema.

--Jeff



More information about the development mailing list