#mysql #sql #database-design #foreign-keys
#mysql #sql #проектирование базы данных #внешние ключи
Вопрос:
У меня есть задача, в которой мне нужно создать базу данных, подобную социальным сетям. Мне нужно иметь 3 таблицы пользователей, друзей и статуса.
Моя проблема в том, что мне нужно иметь отношения с друзьями по таблице и пользователями таблицы.
Я пытался выполнить задачу, но я просто не понимаю. Также статус таблицы должен иметь связь с пользователями таблицы (user_id ). Я знаю только, что у table friendship должно быть 2 внешних ключа.
Вот также диаграмма EER того, что я пытался сделать.
Ответ №1:
Вам нужны два внешних ключа в двух разных столбцах friendships
, указывающих на users
:
create table friendships (
request_sender int not null,
request_receiver int not null,
...
constraint request_sender_users_fk
foreign key (request_sender)
references users(user_id),
constraint request_sender_receiver_fk
foreign key (request_receiver)
references users(user_id)
);
Примечание: я не думаю, что имеет смысл иметь три разных столбца для хранения статуса «запроса на дружбу», как в вашем ERD: friendship_accepted
, friendship_declined
и friendship_on_hold
. Предположительно, отношение может иметь только один статус одновременно, поэтому одного столбца должно быть достаточно, с en enum
или-подобным.