refine interface and add some impl in Relation