Определение базы данных отношений - PullRequest
0 голосов
/ 14 сентября 2018

Я добавляю функцию в приложение, где пользователи могут отправлять и получать личные сообщения чата другим пользователям. (сообщение может быть отправлено только одному пользователю).

Пользовательская модель проста с идентификатором, именем и т. Д. Модель сообщения будет иметь идентификатор, заголовок, тело, senderId и receientId.

Пользователь может отправлять много сообщений, а также получать много сообщений, поэтому я думаю, что это отношение многих ко многим. Но пользователь может отправлять много сообщений, но каждое сообщение будет отправлено одним пользователем, поэтому оно может быть одним для многих.

Как я могу определить, какие это отношения? Я искал в Интернете об отношениях и просто не могу понять это. Я использую Entity Framework.

Я понимаю базовые отношения с базой данных, но это сложно, так как используется как отправитель, так и получатель.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Предполагая, что я вас правильно понимаю:

Message имеет отношение многие-к-одному с user в senderId . Message также имеет отношение многие-к-одному с user на receientId .

Запрос данных будет выглядеть примерно так:

SELECT
    s.Name AS Sender
    ,r.Name AS Recipient
    ,m.Title
    ,m.Body
FROM
    Message AS m
INNER JOIN User AS s ON
    m.SenderID = s.ID
INNER JOIN User AS r ON
    m.RecipientID = r.ID

Быстрая и грязная ERD

0 голосов
/ 14 сентября 2018

Интересно, я не совсем понимаю, потому что, кажется, вы уже ответили на свой вопрос?Может быть некоторая путаница, потому что вы используете термины «пользователь» вместе с «отправитель» и «получатель».

Отправители и получатели - это все пользователи, идентифицированные по идентификатору пользователя, но поведение получателя отличается от поведения отправителя.Его следует рассматривать как другой элемент в модели.

Отправитель имеет отношение один-ко-многим с сообщением, поэтому сообщение знает, кто является его отправителем.

Тем не менее, сообщение имеет отношение один-ко-многим со своими получателями - поэтому в типичных шаблонах проектирования сообщение не знает, кто его получатели, а получатели, которые все знают, кто их сообщение.Поэтому обычно требуется какой-либо объект отображения messageRecipients, который имел бы messageID и получателя (через идентификатор пользователя).

User                         Message                      MessageReceiver
--------------------         --------------------         --------------------
UserID                       MessageID                    MessageReceiverID 
UserName                     Sender (FK UserID)           Message (FK MessageID)
.                            MessageBody                  Recipient (FK UserID)
. (other fields)             .                            .
.                            . (other fields)             . (other fields)
                             .                            .

Может показаться странным говорить об отдельном объекте messageRecipient, когда мызаново представьте, что наша сущность сообщения имеет те же поля, что и обычные редакторы электронной почты или мгновенных сообщений - в них всегда есть место для перечисления получателей.Но это гоча.Если наше поле данных представляет собой список элементов, в которых нам нужно будет работать с этими элементами по отдельности, то нам, вероятно, потребуется новый объект для управления ими.

Во всяком случае, это мое мнение.Надеюсь, это поможет.

...