[Zope] Storing Data inside Zope
J Cameron Cooper
Mon, 02 Jun 2003 14:45:31 -0500
>Just how bad an idea is it to use Zope object Properties to store
>numeric/text application data?
Depends. See below for a less glib response.
>My first Linux (or otherwise) Zope app will be a gratis case tracking system
>for a friend's small (himself plus 3 staff) law office. Other than setting
>up new clients and cases (maybe a few a day) the most frequent data changes
>will be adding new activity detail records which are small. Only a couple
>of reports are run each day. Overall transactions will be few and small.
>My initial idea was to use MySQL or PostgreSQL for data storage. While
>developing the framework of the app I want to be able to store/retrieve a
>few records for testing. Since every bit of Zope (HTML, DTML, Python, etc.)
>is new to me, every time I start to do something I have to learn something
>else first. ...
Unless you already have a relational database or your data is terrbily
relational, I recommend not using an external database. Things become
simpler that way.
Zope objects are a good place to store data, but you should be
thoughtful about how it is done. Which is to say, you should design
object-orientedly and not expect to use Zope objects like tables.
If you make one object to store a large set of data, you'll run into
problems. Not the least of which is a rapidly growing storage due to the
undo mechanisms. So factor your data space down to sets of properties or
natural objects, and make those, either as a product or (as previously
suggested) a PropertiesObject/Abracadabra system. You could also use
ZClasses, but I wouldn't: they are, shall we say, problem prone.
In your case you'll probably have a Client, which will have Cases, which
will contain ActivityDetailRecords. A Client might have name, address,
and whatnot properties, a Case might have description, judge, dates, etc
properties, and ActivityDetailRecords might have date and contents
properties. (I am of course just guessing about these.) This way you get
a clean containment, plus most of the objects are immutable or rarely
changed, so you only store the data you actually need to store.