sql-server - 在表中存储大量 bool 列的最佳方法

标签 sql-server database-design

我不确定以前是否有人问过这种问题,但我进行了搜索并找到了任何东西。

我目前正在处理一个数据库,该数据库的记录中存储了大量基于 bool 值的记录,因此表结构如下所示:

===Table===
ID <- int
Name <- string
Bool1 <- bool
Bool2 <- bool
Bool3 <- bool
Bool4 <- bool
Bool5 <- bool
Bool6 <- bool
Bool7 <- bool
Bool8 <- bool
Bool9 <- bool

并非所有的 bool 值都设置一次,因此每条记录可以选择一个、多个或不选择。

我想过做这样的事情:

==Main Table==     ===Second Table====
ID <- int PK          ValueID <- PK links to Main Table ValueID
Name <- string        ID <- int
ValueID <- FK         Value <- Contains name of assigned value eg Bool1, Bool2

因此在 ValueID 上连接的主表和次表之间存在一对多关系。所以第二个表只有所选项目的数据,而不是主表中的一堆空 bool 值。

我考虑这样做的原因是它允许我添加不同的值以在将来存储在记录中,而不是更改表结构。

这是存储大量 bool 值的好方法吗?

我真的很想能够将其绑定(bind)到带有复选框的表单 , 这样做会很难吗。

所以如果这有点难以理解我需要什么,我真的不知道如何用文字来解释它。

谢谢。

最佳答案

保持原样!

数据库会非常有效地打包多个位字段。我见过人们做一些事情,比如拥有一个 32 位 int 字段,从而允许他们使用位掩码存储 17 个 bool 值,并“为其他字段留出一些空间”。这太愚蠢了,简直就是一场维护噩梦,您的查询中到处都是位掩码,难以维护。

我会重申,保持简单,只有 bool 列。如果您需要新列,请添加它。您不需要创建单独的表。

关于sql-server - 在表中存储大量 bool 列的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1086310/

相关文章:

SQL 数据库查询结果按 ChildrenIDs 和 subChildrenIDs 分组

sql-server - 如果值为空,如何在单个查询中更新列的值,然后使用先前的非空值更新

c# - 在mvc布局页面显示动态菜单

sql-server - 64 位版本的 SQL Server 报表生成器

mysql - 数据库模式一列条目引用了另一个表中的多行

mysql - ER_NON_UNIQ_ERROR以及如何正确设计表

sql - 如何确保两列始终等于同一事物

ruby-on-rails - Rails 中的多列索引顺序

sql-server - 将数据库迁移到 Azure 的 Bacpac 与 dacpac

database - 数据库对象的工作单元是什么?