Add this line as a test: db.executesql('create unique index idx_owner on bodypart(owner)')
to your code like this: db = DAL('sqlite://storage.db') person = db.define_table('person', Field('name')) bodypart = db.define_table('bodypart', Field('name'), Field('owner', 'reference person', unique=True)) db.executesql('create unique index idx_owner on bodypart(owner)') pid = person.insert(name='Sid') bpid = bodypart.insert(name='arms', owner= pid) bodypart(bpid).owner bpid = bodypart.insert(name='mouth', owner= pid) bodypart(bpid).owner --