Object Relational Mappers are evil (a meditation)
Diez B. Roggisch
deets at nospam.web.de
Mon Oct 5 21:47:46 CEST 2009
Aaron Watters schrieb:
> This is a bit off topic except that many Python
> programmers seem to be allergic to typing SQL.
> RESOLVED: Using ORMs leads lazy programmers
> to make bad database designs. It's better to
> carefully design your database with no invisible
> means of support and there is no reason to not
> use SQL directly for this purpose.
> FOR EXAMPLE: Consider blogging. The most
> successful blog software is WORDPRESS. Here
> is the WordPress data model:
> Beautiful, isn't it? It was designed by people who
> thought about what they were doing and did it carefully.
> Now let's look at the Sakai Blogger tool data model
> (as reverse engineered by someone who had to
> fix a bug -- there actually was no data design created
> by the implementers):
> How did the above happen? I suspect someone opened
> up Eclipse and started typing, relying on the Hibernate
> ORM to handle all the database stuff automagically. The
> result is a massive headache for people like me. Another
> one. I routinely open up the mysql prompt and start typing
> "show tables", "describe table blah", "select * from blah limit 10"...
> trying to figure out WTF Hibernate did with my data.
I think your example is nonsense. Just comparing the two models based on
"they both are for blogging" is like comparing a cessna to a 747 - yes,
both are flying, but that's pretty much what they have in common.
It is pretty clear that sakai's data-model caters to a very
sophisticated *user*-model, with roles and permissions, and whatnot.
Plus other features. So it appears to be more in the CMS-league.
Now it's obviously easy to argue that this isn't needed for a simple
blog. Nonetheless, it doesn't make a point about ORM. With any ORM I
know (both in Java and Python) you could design the simple and straight
model WP uses.
And I've seen my fair share of convoluted, trashy pure-SQL-based DBs as
So I think to make your point you need some more convincing arguments.
More information about the Python-list