Разработка схемы системы сообщений в стиле Facebook - PullRequest
1 голос
/ 10 января 2011

Я хочу внедрить систему обмена сообщениями в стиле Facebook (цепочку сообщений) на мой сайт.

Как вы думаете, эта разметка схемы выглядит хорошо?

alt text

Doctrine schema.yml:

UserMessage:
  tableName: user_message
  actAs: [Timestampable]
  columns:
    id: { type: integer(10), primary: true, autoincrement: true }
    sender_id : { type: integer(10), notnull: true }
    sender_read: { type: boolean, default: 1 }
    subject: { type: string(255), notnull: true }
    message: { type: string(1000), notnull: true }
    hash: { type: string(32), notnull: true }
  relations:
    UserMessageRecipient as Recipient:
      type: many
      local: id
      foreign: message_id
    UserMessageReply as Reply:
      type: many
      local: id
      foreign: message_id
UserMessageReply:
  tableName: user_message_reply
  columns:
    id: { type: integer(10), primary: true, autoincrement: true }
    user_message_id as message_id: { type: integer(10), notnull: true }
    message: { type: string(1000), notnull: true }
    sender_id: { type: integer(10), notnull: true }
  relations:
    UserMessage as Message:
      local: message_id
      foreign: id
      type: one
UserMessageRecipient:
  tableName: user_message_recipient
  actAs: [Timestampable]
  columns:
    id: { type: integer(10), primary: true, autoincrement: true }
    user_message_id as message_id: { type: integer(10), notnull: true }
    recipient_id: { type: integer(10), notnull: true }
    recipient_read: { type: boolean, default: 0 }

Когда я получу новый ответ, я буду следить за тем, чтобы булевому значению "receient_read" для каждого получателя было присвоено значение false и, конечно,убедитесь, что sender_read также имеет значение false.

Я использую хеш для URL: http://example.com/user/messages/aadeb18f8bdaea49882ec4d2a8a3c062

(Поскольку идентификатор будет начинаться с 1, я не хочу иметь http://example.com/user/messages/1. Да,Я мог бы начать увеличиваться с большего числа, но я бы предпочел начать с 1.)

Это хороший способ сделать это?Ваши мысли и предложения будут высоко оценены.

Спасибо, ребята!

Ответы [ 3 ]

1 голос
/ 01 марта 2012

А как насчет этой модели?

MESSAGES              USER_MESSAGES
========              =============
id                    id
content               message_id
reply_message_id      recipent_id
                      read
                      trash
                      hide
0 голосов
/ 12 января 2011

Я также пытался создать систему сообщений, используя базу данных, самый распространенный недостаток - забыл, что у каждого пользователя разное состояние прочитанного и непрочитанного сообщения. Я почти не показываю схему базы данных, но вкратце вы должны рассмотреть возможность создания флага isread для каждого пользователя для каждого user_message и user_message_reply, чтобы каждый пользователь просто видел непрочитанное сообщение.

0 голосов
/ 11 января 2011

В чем разница между user_message.created_at и user_message_recipient.created_at?

Тот же вопрос для updated_at. (Позже: я думаю, что user_message_recipient.updated_at может быть временем, когда получатель прочитал сообщение. Если это так, я бы предпочел более осмысленное имя.)

Рассматривали ли вы копание в некотором исходном коде для проектов с открытым исходным кодом, которые предназначены для замены Facebook?

Когда я получу новый ответ, я позабочусь о том, чтобы логическое значение для "receient_read" для каждого получателя было установлено в значение false, и, конечно, я также убедился, что для sender_read также установлено значение false.

Надеюсь, это означает, что dbms проверит, что эти логические значения установлены правильно.

...