【问题标题】:What's the proper way to store external/unauthenticated users in a database?将外部/未经身份验证的用户存储在数据库中的正确方法是什么?
【发布时间】:2012-08-07 17:40:04
【问题描述】:

我的网站支持注册用户和非注册用户之间的通信。我正在尝试确定在数据库中存储非注册用户的最佳实践。我的初始架构如下:

Users
------------
user_id
device_id *Unique* (this is for mobile app users)
email *Unique*
phone *Unique*
first_name
last_name
image_url
date_joined

UserNames  (Users have custom names for each group potentially)
-------------
name_id
user_id
group_id
first_name
last_name

应用程序如何工作的更多细节:

  • 用户注册并创建组/列表,其中包括注册用户和非注册用户
  • 然后将消息发送给组/列表的成员
  • 注意:注册用户可以在未经他们明确批准的情况下将非注册用户添加到列表中。

我选择上面列出的设计是因为电子邮件、电话号码和设备 ID 是唯一的。但是,用户可能对每个用户有不同的名称/昵称,因此 UserNames 表。但是,我不清楚存储非注册用户是否应该存储在用户表中,因为他们在技术上不是网站的注册用户。

我应该将非注册/外部用户存储在单独的表中吗?如果您需要我澄清任何事情,请告诉我。

【问题讨论】:

    标签: mysql sql database postgresql activerecord


    【解决方案1】:

    您是否将未注册用户隔离到他们自己的表中是一个设计决定,可能只有您可以回答。这可能取决于在整个应用程序中如何使用这些不同的用户类型。可以很简单,例如有一个包含 0 或 1 值的 tinyint 字段来指示用户已注册。

    【讨论】:

    • 在“用户”表中存储“非用户”有什么问题吗?我猜这更像是一个语义讨论。将非用户存储为“用户”感觉有些不对劲。
    • +1 关于使用 tinyint 字段。听起来“未注册”用户仍然是您的应用程序设计的一部分(例如,您希望向他们发送消息),这意味着您需要维护记录。那么问题是不同的表与否。如果特征与注册用户非常相似,就放在同一张表中。
    • 对我来说,这取决于您的应用程序和预期的表格大小。如果您真的不打算保留有关非注册用户的任何日期,那么我可能根本不会将它们放在数据库中(并且只是将它们作为匿名用户在代码中处理),但是如果您正在做类似的事情已注册用户邀请未注册用户到您需要保留未注册用户信息的位置,那么将它们放在数据库中就没有任何问题。
    • 对我来说,我尝试用现实世界的术语来看待它。注册用户是否会拥有未注册用户没有的额外数据属性(反之亦然)?如果是这样,将它们放在具有不同结构的不同表中可能是有意义的。
    • 感谢 cmets。听起来要关注的主要问题是是否会有过多的未注册用户具有空的 date_joined 字段。不确定最终会产生多大的影响。有一堆空的日期字段有什么缺点?我理论上可以将它存储在不同的表中,而是添加一个 tinyint 字段,即“is_external”或其他。
    猜你喜欢
    • 2020-05-08
    • 2023-04-07
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2020-09-06
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多