Создание очень простой схемы обмена сообщениями в SQL - PullRequest
1 голос
/ 08 августа 2011

Вот что у меня есть:

create table Recipiente
(
RecipienteId int primary key identity(1,1),
MensajeId int foreign key references Mensaje(MensajeId)
)

create table Mensaje
(
MensajeId int primary key identity(1,1),
EnviadorId int foreign key references taJugador(jugCodigo), /* Sender */
Detalle nvarchar(1024) not null /* The actual message. */
)

Мне нужно иметь возможность отправлять сообщения нескольким людям одновременно, поэтому в этом и заключается моя проблема.Обратите внимание, что в настоящее время нет никакой связи между двумя таблицами, потому что я не знаю, как поступить.

Есть предложения по заполнению этой простой схемы?

Ответы [ 3 ]

0 голосов
/ 08 августа 2011

Вам нужна соединительная таблица. Удалите MensajeId из таблицы Recipiente и добавьте новую таблицу, например, такую:

Recipiente_Mensaje
RecipienteId int foreign key references Recipiente(RecipienteId)
MensajeId int foreign key references Mensaje(MensajeId)

Оба столбца будут частью первичного ключа ..

0 голосов
/ 08 августа 2011

Создание таблиц, таких как:

Messages
----------------------
Id (primary key)
SenderId
RecipientId
Message (you could replace this by an id and read it from an external table)

Peoples
----------------------
Id (primary key)
... some other data ...

Затем для каждого сообщения от отправителя получателю добавьте запись в Messages, ссылаясь на людей из Peoples вместе с сообщением.

0 голосов
/ 08 августа 2011

Вы можете создать таблицу для сопоставления отношения один ко многим, которое выглядит следующим образом:

Table: Mensaje_Recipiente
Column 1: MensajeId
Column 2: RecipienteId

Первичный ключ будет на обоих идентификаторах. Предположим, что сообщение 5 отправлено пользователям 4, 5 и 8, тогда вы добавите (5, 4), (5, 5) и (5, 8) в свою таблицу Mensaje_Recipiente.

Позволяет вам найти сообщения, которые пользователь получил (SELECT MensajeId FROM mensaje_recipiente WHERE RecipienteId = ?), или найти получателей сообщения (SELECT RecipienteId FROM mensaje_recipiente WHERE MensajeId = ?) довольно легко, и вы можете получить всю необходимую информацию, присоединившись к соответствующим таблицам.

При этом вам больше не понадобится MensajeId в таблице Recipiente.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...