Register your tables with the personal_data service in boot(). One line per table naming the column that points at a member.
public function boot(): void
{
    $data = $this->app->make('personal_data');
    $data->forget('examples', 'user_id');
    $data->forget('example_votes', 'user_id');
}

That is all. Account erasure and the data export both read this registry, so your tables are covered by both without you writing anything for either.

🚨 A registry rather than a list somewhere central, and the reason is a real bug. Account erasure once used a hardcoded list of tables — which included one belonging to an example extension. On any install without that extension, erasing an account threw.

Register every table that describes a person, including ones that only record behaviour. What somebody read is personal data too.

Sign in to say whether this helped.