Рекомендую разделить понятие "юзер" (аккаунт) и "человек". "Человек" это буквально человек. Одна единица человеческого существа. Юзер/аккаунт это некая виртуальная сущность и у одного человека их может быть много. Я предлагаю использовать термин именно юзера, а не аккаунт, т.к. считаю, что то, что обычно разработчики называют юзером является парой логин-пароль. И такое понимание сложилось просто чисто исторически. Не будем его ломать, так и оставляем.
Связь тут понятное дело один-ко-многим. Конечно, может быть проект в тором запрещено иметь виртуалов, тогда система просто вырождается в один-к-одному, но чисто технически движок должен быть способом к один-ко-многим.
Ни каких опросов провайдер и гаданий на кофейной гуще. Юзер хочет залогиниться, значит явно указывает какого провайдера нужно пнуть по поводу его учетки.
Складывать юзеров в разные таблицы тоже не следует. Зачем? Этим мы только усложняем бизнес-логику приложения закладывая в неё кучу багов. На вскидку юзер зарегался, у него один user_id, подвердился, переносим его в другую таблицу, user_id сменился. В схеме с биллинг-сервером (центральное хранилище юзеров) можно поиметь много секса. Опять же коллизии в user_id.