Only allow user to access a link once a year, based on their joining date

You got the native date( 'Y' ); function that will give you in that case the current year. Combine that with some if/else statement and wp_redirect( $location, $header );and you’re almost finished. It’s as easy as using user meta data $current_user to check and so on.

Btw: no need to add any extra tables. Just use add_user_meta(), update_user_meta() & get_user_meta() functions.

Update: Try to only use a single meta field per user and store your data in there as an array to avoid polluting the table too much.