Есть сайт где пользователь может задавать вопросы другим пользователям (одному или нескольким). У меня есть таблыцы: пользователи-tb_users
и вопросы-tb_question
, теперь как мне как мне хранить данные о том, какой пользователь каким-(ому) пользователям-(ю) задаёт вопрос.
В том виде в котором вы задали вопрос ответ будет следующим.
Вам нужна дополнительная таблица tb_recipients
с двумя полями - id_question
и id_recipient
(foreign key к question и users соответственно).
Допустим, вам нужно вопросу с id = 18 дать видимость пользователям с id = 3, 4 и 5. В этом случае вы в таблицу tb_recipients
вносите три записи: (18, 3), (18, 4) и (18, 5)
За кадром вы оставили вопрос. А сайт будет только сайтом, на котором каждый вопрос виден только ограниченному кругу лиц? Это каждый раз нужно будет указывать кому виден вопрос, неудобно.
А если нужно сразу пару десятков человек указать в получателях? В этом случае можно будет облегчить создание вопросов по шаблонам, указывая видимость не на базе отдельных пользователей, а на основе групп пользователей. (Тут большой простор для творчества).
И если вдруг вы задумаетесь добавить на сайте возможность задавать вопросы публичные, с видимостью "неограниченному кругу лиц" - то тоже нужно будет допиливать схему. Например, создать дополнительное поле на вопросе boolean поле is_public
, чтобы понимать учитывать ли данные в таблице tb_recipients
.
А, что если вместо id_user я буду добавлять username(varchar20). Это никак не повлияет на производительность?
Так не делают. Принято в запросах на выборку делать INNER JOIN и получать имя пользователя. А в таблицах хранят int'товые идентификаторы. Join по int намного более производительная операция, чем join по строке.
Иногда (в высокопроизводительных системах) могут продублировать поле username, чтобы ещё больше выиграть в производительности некоторых операций. Но на вашем уровне понимания SQL лучше всего хранить данные в третьей нормальной форме, а когда уже научитесь - можете для общего развития почитать про денормализацию в highload'е.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не могу убрать черный фон с мапыПробывал в настройках увеличить поле, но не помогает(крысным я показал)