[wp-hackers] A "terms" table
Matt Mullenweg
m at mullenweg.com
Sun Apr 15 23:27:42 GMT 2007
Robert Deaton wrote:
> I would swear you were highly overweight if I didn't know any better.
I'm working on it.
> One of the first rules of SQL has always been to not fetch more than
> you need, to allow sorting and searching to be done on the SQL side,
> etc. This breaks that fundamental rule.
In the context of displaying a post the categories and tags for that
post aren't more than we need, they are exactly what we need. It's an
index lookup.
> The bitfield also introduces new things. Let's face it, the APIs for
> fetching things from the database are horribly incomplete and will
> never ever possibly cover all the things that plugins will want to do.
If our APIs are incomplete, that's a separate and unrelated bug to the
underlying data structure. A plugin should never talk to the core DB
tables and fields directly.
> So, how about a plugin that wants to fetch all the tags to do some
> magic? Well, with a bitfield, that plugin now has to fetch all the
> categories and all the tags, and then sort through with bitwise
> operations and discard the categories which they don't care about.
You can get one or the other on the query level, no reason to select
both. It's also something we could pretty easily create a wrapper
function for, if there isn't one already.
> I think you missed a noun in the last clause of the sentence. Who
> thinks it is?
Oh sorry, I think there are too many. I agree that it's better to have
more fast and light queries than fewer heavy ones, but I don't think WP
is yet fully optimized in this regard, though 2.1 was a step in the
right direction.
> Are you gradually moving us toward dropping this table altogether and
> moving it all into postmeta?
I thought about this a lot, but that would make it pretty difficult to
do a query against posts in category or tag X, which I think is a pretty
common use case and one we should weight the schema toward.
> But like you said earlier, ketchup and mayonnaise are two different
> things. Why would we be trying to put them together?
I'm not going to try and stretch the metaphor too far, but I think at
the base level they do something that can be described and stored in
exactly the same way. I guess you could think of it as the ingredients
that go into each. Perhaps a better analogy would be ketchup and
spaghetti sauce.
> I disagree. Especially because the implementation is lacking so many
> features that other tagging plugins have done well for some time now,
> new plugins are bound to be forced to write their own queries to
> interface with this table. And when they don't work anymore in the
> next version, someone's gonna be pissed.
I think if we cover the basic CRUD operations, every missing feature I
can imagine is doable. If people want to talk to the DB directly, they
should be smart enough to know that means they'll have to update their
plugin accordingly. Fortunately, with a regular release schedule and an
Open Source codebase like ours there aren't really surprises like that
you won't know pretty far in advance.
> I agree, there is something better about shipping and iterating, as
> long as the initial shipment has something that is not fundamentally
> broken.
I don't think anything we've talked about on either is fundamentally
broken, especially from a user point of view.
Historically we've found that the things that are actual issues are very
different from the things we've anticipated to be issues. I don't think
this is unique to us, but is a general tenet of software design and
development in general.
--
Matt Mullenweg
http://photomatt.net | http://wordpress.org
http://automattic.com | http://akismet.com
More information about the wp-hackers
mailing list