Дана MySQL БД для хранения анкет и результатов их заполнения.
answer хранит ответы на вопросы анкет.user_profile хранит ответы на вопросы профиля пользователя.user хранит только id для связи user_profile и answer.Мне нужно разграничить ответы на вопросы анкет и ответы на вопросы профиля пользователя. Поля в answer и user_profile как видно на модели почти идентичны. Я хочу связать user_profile с user также как user связана answer (many to one). Я хочу избавиться от полей name, email, tel и т.д. из таблицы user и оставить только id (PK).
Правильно ли будет использовать таблицу user, в которой будет только primary key (PK) и ничего больше для связи user_profile и answer?
Довольно часто таблица определяет тип данных, а строки в ней значения этого типа. Если в вашей системе есть вырожденный пользователь (у которого есть только id), то логично создать таблицу с единственным столбцом id (по которому будет построен первичный ключ).
В реальных системах таких таблиц обычно не бывает, так как у пользователей находятся какие-нибудь атрибуты типа логина или даты регистрации. Однако, если у пользователя кроме id действительно ничего нет, то использовать такую таблицу можно и нужно.
Непонятно только почему вы ответы на вопросы анкет и ответы на вопросы профилей разделили в разные таблицы. Да ещё и назвали ответы user_profile. Кажется тут что-то не так.
По идее, ответы это ответы. Чтобы их отличать, надо знать на какие вопросы они были заданы. Чтобы различать вопросы, надо знать, где они были заданы. Соответственно, чтобы разделить ответы по тому на откуда заданные вопросы они были даны, надо сджойнить к ответам вопросы, и места откуда эти вопросы были заданы. Это довольно неудобно и можно денормализовать схему, добавив вопросам столбец тип вопроса, со значениями вопрос анкеты и вопрос профиля (type enum('questionnaire', 'profile') not null), тогда всё станет немного проще.
Я тут подумал, анкета может переводиться как профиль, а таблицы анкеты в вашей диаграмме нет. Вы точно понимаете, что и как хранится в этой базе? Кажется, что таблица user_profile хранит анкеты, а не ответы.
Продвижение своими сайтами как стратегия роста и независимости