通知设置的数据库设计

时间:2011-01-23 13:23:43

标签: sql-server database oracle sql-server-2008 database-design

  • 用户可以开启或关闭 他的通知设置 帐户,用于通知等 更改了帐户资料信息, 收到新消息等

  • 通知可以通过电子邮件或手机发送(推送或短信),用户只能收发1封电子邮件和许多移动电话设备。

您有什么方法可以改进以下数据库设计,还是以不同方式进行?

让我知道谢谢

USER_NOTIFICATION_SETTING
Id
UserId
Notification_SettingCode
NotificationTypeCode
UserDeviceId -- the mobile deviceid
IsEnabled -- true (notification is on), false (notification is off)

NOTIFICATION_SETTING
Code - e.g 1001, 1002
Name -- e.g Changed Account Profile Information, Received New Message etc

NOTIFICATION_TYPE
Code - e.g 1001, 1002
Name -- e.g Email, SMS, Push


USER_DEVICE -- the mobile phone device information
etc...etc...

3 个答案:

答案 0 :(得分:4)

alt text


也许这个传播自然键。这有更宽的表,但需要更少的连接。例如,您可以直接从UserName收到NotificationQueue的通知。

alt text


或者这个,如果你只有电话和电子邮件就足够了。到目前为止最简单 - 我认为目前我最喜欢这个。

alt text

答案 1 :(得分:0)

你做的事实际上看起来很不错。我个人不喜欢做以下事情:

  • 消除User_Notification_Setting上的UserId列,因为它应该已经在User_Device表中
  • 删除表名中的_s
  • 将Notification_Setting和Notification_Type中的代码字段更改为Id(即使它们不是Identity列),然后将其他表中的外键引用更改为具有更一致的NotificationTypeId字段名称。
  • 消除IsEnabled字段。在交叉路口存在记录的事实应该足以获得通知。删除该记录意味着没有通知。我可以看到为什么你可能想要记住一次有一个通知,也许可以轻松重新启用但我看不到交叉点存储的信息,所以删除也一样好。

答案 2 :(得分:0)

看起来不错,只有一些小建议:

  • 命名代码字段,使用表名然后_Code
  • 添加所有更改的通知

我不同意Tahbaza的一些事情:

  • 我会留下用户ID,然后更快地获取用户的所有通知
  • 我会留下isEnabled,然后可以暂时停止所有通知