1

Я пытаюсь создать диаграмму ER, где у меня есть ПОЛЬЗОВАТЕЛЬ и объект MESSAGE. Пользователи могут отправлять сообщения другим пользователям. Я разработал для этого две альтернативные диаграммы, но я не уверен, какой из них правильный. In the first one i use a recursive relationship with roles whereas in the second one, i use 2 different relationships.Как моделировать обмен сообщениями между пользователями? - ER-диаграмма

ответ

2

Ни то, ни другое. Здесь у нас есть случай самостоятельности.

Отправка сообщений интерпретируется как событие, а не как сущность, даже если оно имеет атрибуты/свойства. Между двумя объектами существует тесная связь: пользователи, а также пользователи. Правильное место для концептуальной модели в ER-диаграмме будет:

pic01

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

После того, как вы расчленить его, то есть, как только вы делаете разложение в логической модели, вы в конечном итоге с следующий случай:

pic02

«В» и «С» здесь представляет иностранный ключ. Этот тип модели приводит к двум таблицам в базе данных. Один из них будет представлять пользователей системы. Другой будет представлять сообщения, которыми обмениваются пользователи. Внешние ключи здесь могут или не могут служить в качестве составного первичного ключа. Я, по-моему, предпочитаю использовать суррогатные ключи, но это зависит от вас.

Надеюсь, я каким-то образом помог. Если у вас есть дополнительные вопросы, прокомментируйте, и я отредактирую свой ответ, или я тоже могу добавить комментарий.

0

Я думаю, вы можете использовать второй, но только с одним отношением «многие ко многим».

Таким образом, вы можете иметь много-ко-многим отношений с двумя внешними ключами указывающих USER и один для СООБЩЕНИЯ.

Итак, у вас есть IDUSERSENDER, IDUSERRECEIVER и IDMESSAGE. Я не делаю то, что у вас есть в таблице сообщений, но вы также можете добавить атрибут в отношении ТЕКСТ для вставки здесь контура сообщения.

Как вы думаете? Соответствует ли эта идея вашим потребностям?

0

Я бы сделал sender_id атрибутом сообщения, имея таблицу «много ко многим» для получателей. Формально модель ER не смешивает отношения между объектами с атрибутами. Я считаю, что 2-я диаграмма формально правильная, хотя два отношения будут реализованы по-разному.

Смежные вопросы