Можно ли использовать только primary key в MySQL таблице?

232
16 мая 2021, 20:40

Дана MySQL БД для хранения анкет и результатов их заполнения.

  1. Таблица answer хранит ответы на вопросы анкет.
  2. Таблица user_profile хранит ответы на вопросы профиля пользователя.
  3. Таблица 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?

Answer 1

Довольно часто таблица определяет тип данных, а строки в ней значения этого типа. Если в вашей системе есть вырожденный пользователь (у которого есть только id), то логично создать таблицу с единственным столбцом id (по которому будет построен первичный ключ).

В реальных системах таких таблиц обычно не бывает, так как у пользователей находятся какие-нибудь атрибуты типа логина или даты регистрации. Однако, если у пользователя кроме id действительно ничего нет, то использовать такую таблицу можно и нужно.

Непонятно только почему вы ответы на вопросы анкет и ответы на вопросы профилей разделили в разные таблицы. Да ещё и назвали ответы user_profile. Кажется тут что-то не так.

По идее, ответы это ответы. Чтобы их отличать, надо знать на какие вопросы они были заданы. Чтобы различать вопросы, надо знать, где они были заданы. Соответственно, чтобы разделить ответы по тому на откуда заданные вопросы они были даны, надо сджойнить к ответам вопросы, и места откуда эти вопросы были заданы. Это довольно неудобно и можно денормализовать схему, добавив вопросам столбец тип вопроса, со значениями вопрос анкеты и вопрос профиля (type enum('questionnaire', 'profile') not null), тогда всё станет немного проще.

Я тут подумал, анкета может переводиться как профиль, а таблицы анкеты в вашей диаграмме нет. Вы точно понимаете, что и как хранится в этой базе? Кажется, что таблица user_profile хранит анкеты, а не ответы.

READ ALSO
Получить данные из формы в файл php

Получить данные из формы в файл php

Мне надо вывести данные из формы в файл

94
Функциональное тестирование в PHP

Функциональное тестирование в PHP

Можно ли использовать модули Symfony для функционального тестирования вне фреймворка, если да, то где можно почитать, как всё это настроитьИли...

93
Как проверить, что строка состоит только из пустых или невидимых символов?

Как проверить, что строка состоит только из пустых или невидимых символов?

Как проверить, что строка состоит только из пустых или невидимых символов? То есть разрешены любые символы, но строка не может быть, например,...

163