Creating groups and members
Having state in User table doesn't look good to me. It introduces dependency between User.group and User.state - group should be null if state equals 0, and non-null if state is 1 or 2. Also, column name is very confusing (I'd expect User.state to reflect user status (say active/inactive), or part of address (e.g. California/New York) , not state of relationship between user and group).  

I'd put value in User.group only when user belongs to group, and handle requests in separate table user_group_request (user_group_request_id (PK),user_id, group_id, request_date, request_text, request_state,response_date). When user wants to join group, you add a new record into user_group_request. Setting User.Group should be part of approval routine. Also, depends on your model, you may want to add unique constraint on user_group_request(user_id, group_id), so one user cannot send multiple requests.