>> Could you elaborate on what you'd expect from >> join expressions aren't automatically created based on the DAL definition
1) - answer to your question 2) - idea to deleting integrity - I think this could be very useful and easy to add to web2py core 1) SQL language is very clever, but I always wondered, why millions of developer always thousand times have to write: JOIN dog ON dog.person_id=person.id or in web2y: db(db.dog.person_id==person.id) if they want records from both tables. Because this "connecting" expression is already known from the database definition (from definition of foreign keys). So, it would be nice, if we have tool, which can create such expressions automatically, when we ask for fields/records from linked tables. I don't know, if this idea is implemented somewhere in Java, Microsofts, python,.. utilities. I have implemented it partially in Visual FoxPro, where my ideas were following: Each SQL command has its "basic" table (in FROM..) and "linked" tables (in JOINs). Inside linked tables one table from database can however occur more times (we need more than one table alias for table), from 2 reasons: -- table can have 2 or more foreign keys pointing to same table, -- through more joins we can come back to an already used table /I know you don't believe this much :-)/ So, I decided to find possibility, how I can name all possible table aliases in automatic way. I had a metadata table of all joins in database, so there were primary keys join.id I created table aliases like: dog ("basic" table), dog_15 ("linked" table person", join.id==15 was primary key of the foreign key dogs.preson_id in metadata). That way I can created all possible table aliases, and the name isn't very long, f.e. dog_15_4_8 is shorter as dog__dog_person_id__person_city_id__city_country_id >From metadata table I can then take all what I need to automatically create join expressions: table1.foreignkey==table2.primarykey So I can create query designers, where user can choose everything in database (every field in every table) - he can always choose from fields in current table + from joins outgoing from current table (list of joins I can get easy, when I select records (means joins) from metadata table WHERE table=currenttable). And whatever user will choose, SQL SELECT will be created automaticaly to receive required data. But I stopped this work in Visual FoxPro and switched to web2py. I would like to continue sometimes later with this in web2py, to create a plugin for this. Maybe after 6 months, but now I'm new in python and web2py to do such work. Or maybe somebody here can try go in this way, if he is interested... If in web2py, maybe there is not necessary to use metadata table of joins. Maybe this can be implemented as properties of foreign key, f.e.: db.dog.person_id.joinname='15' # just a symbol to create aliases; target table we know from 'reference..' field type, target key is always primary key .id 2) Similar it would be nice to implement the deleting integrity at the application level: db.dog.person_id.ondelete='setnull' # 'setnull' (default?), 'cascade', 'restrict' - says what to do when person (dog owner) is to be deleted