support composite primary keys