I don't really understand the question but I would think something like this:
db.define_table('company', Field('name')) db.define_table('server', Field('name'), Field('company', db.company), Field('location', db.location)) db.define_table('location', Field('name')) Or since each company only has one location: db.define_table('company', Field('name'), Field('location')) db.define_table('server', Field('name'), Field('company_id', db.company)) To get the location of the server #1, you have to do a query: record = db(db.server.id==1)(db.server.company_id==db.company.id).select().first() location = record.company.location