存储用户设置 - 使用"Flags"或"Bits"而不是一堆bool有什么问题?

 mobiledu2502889521 发布于 2023-02-13 15:53

我正在设计我的MVC应用程序的用户设置,现在我有~20个布尔设置,用户可以切换.由于每个用户总是会进行所有设置,因此我考虑将每个设置存储为User表中的布尔值.虽然随着应用程序需求的增长,这将变得难以处理.

第一个问题 - 在这种情况下,你的桌子上有大量的柱子有什么问题吗?

然后我考虑使用Flags,并将设置存储为数组中的每一位:

[Flags]
public enum Settings
{
    WantsEmail = 1,
    WantsNotifications = 2,
    SharesProfile = 4,
    EatsLasagna = 8
}

然后每个用户在其用户行中将有一个"设置"列,如果有20个设置,则存储值为2 ^ 20.

我用这个来指导我的努力:[Flags] Enum属性在C#中意味着什么?

这比前一种做法好吗?欢迎任何建议.

1 个回答
  • 这取决于从数据管理角度来看应该被视为原子的东西.

    如果您始终从/向数据库一起搜索,读取和写入所有设置,则整个设置集可以被视为原子设置,并且可以一起存储在数据库中.

    但是,如果您需要在设置的子集上执行任何这些操作(例如,只设置一个标志而不修改其他设置),那么它们不是原子的(从数据管理角度来看),因此将它们一起存储在同一个数据库字段中违反原子性原则,因此违反了1NF.

    请注意,某些DBMS(例如MS SQL Server)在存储布尔值时非常有效(在理想情况下,每个布尔字段只有一位).即使那些不完美的那些通常也不会花费超过一个字节的每个布尔值(甲骨文,我正在看着你),这可能只会在你拥有数百万或数十亿用户时成为一个问题.

    2023-02-13 15:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有