data-design question

Trevor DeVore lists at mangomultimedia.com
Tue Sep 27 12:44:45 EDT 2005


On Sep 27, 2005, at 3:44 AM, Alex Tweedly wrote:

> [NB - I'd use Trevor's libDatabase along with either 1, 2 or 3 -  
> looks really nice, esp. for someone who isn't an SQL expert. And it  
> does work with PostgreSQL, even thought there are a few places  
> where it only mentions MySQL.]

There are a couple of areas that you may experience problems with  
PostgreSQL:

1) Quoting strings.  libDatabase automatically quotes strings for you  
when updating/adding records.  I haven't looked up what characters  
need to be escaped for PostgreSQL so right now PostgreSQL uses the  
MySQL escape routine.

2) Exporting from PostgreSQL to another DB.  I haven't looked at all  
of the data types form PostgreSQL so some of the field type mappings  
might be off.  This would only be an issue if you were developing in  
PostgreSQL and deploying to SQLite, Valentia, etc.

I think that is about it.  I'm happy to correct these things if  
anyone who uses PostgreSQL wants to provide the details or point me  
to the proper place in their docs.

> Too many choices .....
> I've been meaning to write a real SQL app some day, so you've  
> triggered me into trying it. I'm trying a combination of 2 and 5,  
> partly to get a better idea of how "portable" SQL should be between  
> PostgreSQL and SQLite.

I'd imagine you shouldn't have too many problems with SQL depending  
on how complex your queries get.  One problem I ran into with MySQL  
and SQLite was that if you try to access columns by name given this  
query:

SELECT t1.ID, t2.Title FROM table1 t1, table2 t2 WHERE t1.LinkID = t2.ID

The MySQL driver would return them as "ID" and "Title" (This is the  
behavior in Revolution as well as PHP).  With the altSQLite driver  
the columns are named "t1.ID" and "t2.Title".  To get around that you  
have to do this:

SELECT t1.ID as ID, t2.Title as Title FROM table1 t1, table2 t2 WHERE  
t1.LinkID = t2.ID

When getting started, the thing to watch out for is how you handle  
fields for uniquely identifying records.  Each database vendor tends  
to have their own method for creating unique ids for records in  
tables.  If you rely on a vendor specific method then when you port  
you will be sad.  Best to right your own routine for getting unique  
ids for new records in tables.

libDatabase has a simple method built into it that you can use to get  
started.  It just uses one table that stores the names of all of the  
other tables along with the next id.  When you use  
libdb_addNextToTable then the library will handle getting the next  
available id.  The getting started doc explains this.

There are other issues of course, but that can be a big kink in your  
port.


-- 
Trevor DeVore
Blue Mango Multimedia
trevor at mangomultimedia.com





More information about the use-livecode mailing list