如何在sql数据库中保存多个选项

本文关键字:保存 选项 数据库 sql | 更新日期: 2023-09-27 17:58:56

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

  1. 自定义登录
  2. Facebook
  3. 谷歌
  4. Twitter
  5. 链接ID
    ..等

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

平均值:

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

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

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

如何在sql数据库中保存多个选项

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

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

替代方案是:

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

同样,你需要在这些"捷径"上付出努力,但不会获得适当的多对多关系带来的好处。

  1. 如果您希望将其存储在一列中,则必须将配置编码为一个值。您可以使用二进制(custom是1,Facebook是2,google是4,您可以对值执行OR),或者将其编码为字符串。这是高度不可忽视的,你这样做会失去DB的各种优势,并且会对性能造成影响。这也是不可扩展的,因为很难为每个登录首选项添加额外信息
  2. 您可以创建另一个表,其中每个用户可以有多行,每行代表一个登录首选项。这很容易查询和更新,如果您想向每个首选项添加更多信息,只需添加更多列即可
  3. 我同意Adrian的观点,为每个登录首选项创建一列(无论在哪个表中)不是一个好主意。这将迫使您更改数据库架构更改以支持另一种登录方法