【问题标题】:How to save multiple options in sql database?如何在sql数据库中保存多个选项?
【发布时间】:2014-06-03 15:00:57
【问题描述】:

我想在 SQL 数据库中保存外部登录选项的用户首选项。用户可以选择多个选项,自定义登录是默认设置。选项固定如下:

  1. 自定义登录
  2. 脸书
  3. 谷歌
  4. 推特
  5. LinkedId
    ..等

目前我有一个Preference 表,我正在其中保存其他首选项。所以我的问题是如何将这些选项保存在Preference 表中。

意思:

  1. 我应该将它保存在单列中,如何?

  2. 我是否必须创建一个新表 (LoginOptions) 并将其与 Preference 表以多对一的关系链接。

  3. 或者还有其他更好的选择吗?

【问题讨论】:

  • 这是您希望为每个用户保存的全部内容吗?
  • 不,还有其他偏好,包括这些选项
  • 不,我的意思是登录本身。
  • 是的,只有这些选项

标签: c# sql


【解决方案1】:

您提出了用户与其登录选项之间的多对多关系。您最好的选择是拥有一个 LoginOption 表并在该表和 Users(或 Preference)表之间创建多对多关系。

选项 1 本质上是使用单个字段创建多对多关系。从长远来看,与我上面概述的相比,它付出了更多的努力,回报更少。

替代方案是:

  • 在每个外部登录的用户表上都有一个布尔字段 选项。
  • 每个登录选项都有一个 Preference 记录。

同样,您需要在这些“捷径”上付出努力,但不会获得与适当的多对多表关系相同的好处。

【讨论】:

  • 我希望看到您在用户和登录选项之间建立适当的多对多关系。 LoginOption 直接发送至User,或通过Preference
【解决方案2】:
  1. 如果您希望将其存储在单个列中,则必须将您的配置编码为单个值。您可以使用二进制(自定义为 1,Facebook 为 2,google 为 4,并且您对值执行 OR),或将其编码为字符串。这是非常不推荐的,这样做会失去各种数据库优势,并且会降低性能。这也是不可扩展的,因为很难为每个登录偏好添加额外的信息。
  2. 您可以创建另一个表,其中每个用户可以有多行 - 每行代表一个登录首选项。这很容易查询和更新,如果您想为每个首选项添加更多信息 - 您只需添加更多列。
  3. 我同意 Adrian 的观点,为每个登录首选项创建一个列(无论在哪个表中)不是一个好主意。这将迫使您更改数据库架构更改以支持另一种登录方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    相关资源
    最近更新 更多