2

我正在创建一个数据库users。我想让用户选择他们想通过电子邮件接收的通知。

现在我在表中有下一列users(布尔类型):

  • notification_comment_photo.

  • notification_comment_comment.

  • notification_vote_photo.

  • notification_vote_comment.

  • notification_pm.

  • notification_followed.

  • notification_news.

您认为,我应该规范化表用户并创建另一个表notifications,考虑到该表与表具有一对一的关系users吗?

我对社交链接(推特、脸书、谷歌+等)也有同样的问题。单独制作一张桌子更好links吗?

更新。谢谢大家,我会添加单独的表格。

4

2 回答 2

4

很难回答您的问题,因为您没有告诉我们您要解决什么问题。

您当前设计的一个问题是,它需要为您想要存储的每种新类型的通知更改架构 - 如果您想在用户被取消关注时通知他们,您必须在您的用户表中添加一列。

我会考虑这样的模式:

TABLE: users
------------------
ID
...

TABLE: notification_types
----------------------
ID
Description

TABLE: user_notifcation_subscriptions
-----------------------------------------
user_id
notification_type_id
subscribed (bool)

您可以将“订阅”列从 user_notification_subscriptions 中删除,并确定将用户链接到通知类型的任何记录都意味着他们已订阅。

这种设计允许您在不更改架构的情况下添加新的订阅类型。我相信它类似于@Daniel 建议的设计,但他不包括 notification_type 表,而是依赖于名称-值对。我不喜欢这个——当错别字滑入 TYPE 列时,它可能会导致愚蠢的、难以找到的错误。

于 2012-10-14T08:05:44.090 回答
1

您可以(并且可能应该)创建一个单独的表“notification_settings”或其他东西。

 ID
 USER_ID
 TYPE
 VALUE

这使您可以轻松添加通知设置,而不会弄乱数据库表。正如您所建议的那样,拥有一个“严格”的结构有时最终会阻碍并且更难扩展。

对于您的社交链接,您也应该这样做。另一个名为“user_social_accounts”的表

ID
USER_ID
NETWORK_ID
于 2012-10-14T06:47:25.260 回答