通知设置的数据库设计

001*_*001 4 database sql-server oracle database-design sql-server-2008

  • 用户可以打开或关闭其帐户的通知设置,例如更改帐户配置文件信息,收到新消息等通知。

  • 通知可以通过电子邮件或手机(推送或短信)发送,用户只能有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...
Run Code Online (Sandbox Code Playgroud)

Dam*_*vic 5

替代文字


或者,也许这是传播自然密钥的密钥。它具有更宽的表,但需要的联接较少。例如,您可以UserName直接从获取通知NotificationQueue

替代文字


还是这个,如果您只有电话和电子邮件,就足够了。到目前为止,最简单的一种-我认为目前我最喜欢这一种。

替代文字


Tah*_*aza 1

你所做的实际上看起来相当不错。我会出于个人喜好执行以下操作:

  • 删除 User_Notification_Setting 上的 UserId 列,因为它应该已经位于您的 User_Device 表中
  • 去掉表名中的 _s
  • 将Notification_Setting 和Notification_Type 中的Code 字段更改为Id(即使它们不是Identity 列),然后更改其他表中的外键引用以获得更一致的NotificationTypeId 字段名称。
  • 消除 IsEnabled 字段。事实上,在交叉路口存在记录就足以发出通知。删除该记录意味着没有通知。我可以理解为什么您可能想记住曾经有过一条通知,并且可能将其放在那里以便轻松重新启用,但我看到交叉路口没有存储任何信息,因此删除也一样好。