Дизайн базы данных для Facebook - PullRequest
0 голосов
/ 22 января 2011

Создание сообщения на Facebook, например, приложения для внутреннего приложения.

Это как вы это сделали?любой способ улучшить этот дизайн?спасибо:)

MESSAGE
Id
Subject
Content
ReadDate -- datetime
DeletedDate -- datetime
CreatedBy -- userid
CreatedOn -- datetime

MESSAGE_COMMENT
Id
MessageId
Content
CreatedBy -- userid
CreatedOn -- datetime

MESSAGE_RECIPIENT
Id
MessageId
Recipient -- UserId 
ReadDate -- datetime
DeletedDate -- datetime

РЕДАКТИРОВАТЬ: возможно, что-то отсутствует в дизайне или может быть неправильно, дайте мне знать.

Ответы [ 2 ]

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

Во-первых, несколько незначительных предложений с общей точки зрения проектирования:

  1. Поскольку вы используете Pascal Case для имен полей, вы должны также использовать его для имен таблиц, чтобыбыть последовательным.Поэтому MESSAGE_COMMENT должно быть MessageComment

  2. Не используйте повторно имя поля "Id", поскольку оно означает что-то свое в каждой таблице.Таким образом, «Id» в сообщении должно быть «MessageId», «Id» в MessageComment должно быть MessageCommentId и т. Д.

  3. Если поле является внешним ключом, оно должно содержать имяполе, на которое он указывает.Таким образом, «CreatedBy» должно быть «CreatedByUserId», а «Recipient» должно быть «RecipientUserId».Помните, что чем точнее вы называете свои поля, тем меньше дополнительных комментариев и документации вам понадобится, и, следовательно, кому-то еще будет легче запутаться в понимании того, что предполагается.

Теперь,Что касается вопроса «является ли этот дизайн подходящим для X», вам нужно будет предоставить более подробную информацию о том, как вы представляете себе работу этой системы.Похоже, что Сообщение является родительским, тогда как любые ответы на него считаются MessageComments.Пока все выглядит хорошо.

Я не уверен, зачем вам нужен «ReadDate» в основной таблице сообщений, поскольку он также существует на более точном уровне в MessageRecipient.Если, конечно, вы не хотите отлавливать ПЕРВЫЙ раз, когда он читается, но вы все равно можете получить его из таблицы MessageRecipient, посмотрев на всех Получателей определенного сообщения.

Наконец, вам не следует даже иметь «MessageRecipientId»и используя «MessageId» и «RecipientUserId» в качестве составного первичного ключа.Это гарантирует, что вы можете иметь RecipientUserId для сообщения только один раз, без необходимости создавать дополнительный уникальный индекс для этих двух полей.

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

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

...