создание базы данных Mysql (внешние ключи)

#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 или-подобным.