微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 存储用户设置 – 使用“标志”或“位”而不是一堆布尔的错误?

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

一个问题 – 在这种情况下,在桌子上放一吨柱子有什么问题吗?

然后我考虑使用Flags,并将设置存储在一个数组中:

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

然后,每个用户在其用户行中将有一个“设置”列,如果存在20个设置,那么它将存储2 ^ 20的值.

我用这个来指导我的努力:What does the [Flags] Enum Attribute mean in C#?

这比以前的方法好吗?欢迎任何建议.

解决方法

这取决于从数据管理的角度来看应该是什么原子的.

>如果您始终从数据库搜索,读取和写入所有设置,那么整套设置可以被认为是原子的,并且可以一起存储在数据库中.
>但是,如果您需要在设置子集中执行任何操作(例如,只设置一个标志而不修改其他标志),那么它们不是原子的(从数据管理的角度),因此将它们存储在同一个数据库字段中将违反atomicity原则,因此违反了1NF.

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

原文地址:https://www.jb51.cc/csharp/97782.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐