[drupal-devel] A Folksonomy module
Julian Bond
julian_bond at voidstar.com
Wed Mar 9 08:09:07 UTC 2005
"Taxonomy won't work well with 1000 tags". "Taxonomy needs too much work
to support folksonomy modules.". "Use system vocabs"
I looked at this page /admin/taxonomy and some of the Taxo edit controls
and couldn't see it working with very large numbers of terms. I think
*all* the user interface for a tag vocabulary would need reworking. So
it's hard to see what actually gets reused. The form control for use on
nodes is going to be different so preview form would need a hook.
Although some Taxo functions for saving and loading could be re-used,
the output from a free form tag entry will need converting before it
fits into the Taxo scheme. So yes, it would be possible to use the
vocabulary and vocabulary_node_types tables (at least I haven't yet
needed to extend them) but taxonomy admin couldn't show them usefully
and almost none of the vocab manipulation code can be used as is. So
what's the point?
However, Moshe's last post convinces me I need to go and look at 4.6
forum and prove to myself again that Realm can't use the vocabulary
table and there's nothing in taxonomy that can be used as is.
Data model.
I don't believe that users own their tags. I think they only use tags on
specific data. So "My Tags" means "The Tags I've used". In which case
either node_tag has a uid field or we derive it from node.author.
There's a fundamental choice that affects everything else. And it all
depends on if you think a tag exists independent of the nodes or other
objects it's attached to. Or that tags only exist
1) Independent tag
Realm table; rid, name
Realm_type table; rid, type
Tag table; tid, rid, name optionally add cached data like count
node_tag table; nid, tid Optionally rid to make queries faster and
reduce joins.
2) Dependent tags
Realm table; rid, name
Realm_type table; rid, type
node_tag table; nid, rid, name
1) Is more normalised. It will make adding tag_tag synonym and related
tables easier to build later. It makes admin editing a tag easier. It
needs more joins. The saving process may get slow as each tag has to be
found or added before the node_tag link can be created.
In 2) most of the queries are easier, faster and use less joins. The
downside is admin editing a tag is a little harder. Arguably there's
data duplication; potentially X*Y*Z entries in node_tag where X is
nodes,Y is tags per node, Z is average tag length. In practice that's
just not an issue.
Note: All the data model stuff assumes a single link between nodes and
tags. If you want to do users as well I think there has to be a second
link table user_tag. Or maybe table_tag_type; id,tid,type but then the
joins are going to get very nasty.
--
Julian Bond Email&MSM: julian.bond at voidstar.com
Webmaster: http://www.ecademy.com/
Personal WebLog: http://www.voidstar.com/
M: +44 (0)77 5907 2173 T: +44 (0)192 0412 433
S: callto://julian.bond/
More information about the drupal-devel
mailing list