Похоже, что User_type_a и User_type_b идентичны с точки зрения данных, за исключением того, что User_type_b имеет дополнительные данные сверх User_type_a (но у User_type_a нет таких уникальных данных, как этот).
Учитывая это, я бы создал одну таблицу пользователей, в которой хранятся данные User_type_a (то есть пересечение двух пользовательских типов).Затем создайте вторую таблицу для дополнительных данных User_type_b с внешним ключом, связывающим его с пользователями.(Обратите внимание, что здесь нет таблицы в таблице пользователей, определяющей, какие пользователи какого типа.)
Как определить разницу между двумя типами пользователей?Просто: у User_type_b есть связанная строка во второй таблице;User_type_a нет.Это облегчает для любых функций приложения, которые не заботятся о разнице, просто получить общие пользовательские данные для всех, в то время как функции, которые нуждаются в дополнительных данных User_type_b (или иначе заботятся только об одном типе или другом), могут все еще определять, ктоэто какой тип и получить эти дополнительные данные.