Делаю систему, в которой будут админы, владельцы бизнеса, их работники и клиенты. Казалось бы, классика, users - users_roles - roles. Однако, для владельцев бизнеса и клиентов поле "телефон" обязательное. А для работников и админов поле "телефон" не обязательное. Поле "email" для владельцев бизнеса, работников и админов обязательное, а для клиентов не обязательное. Я думаю создать отдельные таблицы: admins, business_owners, employees, clients, так как поля имеют разные ограничения и в будущем могут добавляться новые, для каждого типа отдельно. Стоит ли создавать отдельные таблицы? Ну и еще дело в том, что business_owners и admins не будут привязываться к должности, к оказываемой услуге, к записям на прием.
Тогда нельзя будет в таблице users делать ограничение not null для phone_id. Так как для клиентов может быть это ограничение, а для других пользователей может и не быть.
Так, с телефоном понятно, user_id добавить в таблице "phones". А как быть с email? Он, по задумке, not null и unique для всех, кроме клиентов. Но БД не позволит сделать запись с пустым email для клиента.
Не совсем понял, что вы имели ввиду. Но, в общем, проблема разрешилась. Я просто забыл, что две записи с null не будут считаться нарушением уникального индекса. email оставил nullable, unique. password оставил nullable, так как может быть только привязка к телефону, и вход по отправленному на него четырехзначному коду, а коды будут в отдельной таблице. А телефоны вынес в отдельную таблицу.