在表中存储大量布尔列的最佳方法

Nat*_*n W 2 sql-server database-design

我不确定之前是否曾询问过这类问题,但我搜索过并找不到任何问题.

我目前正在处理一个数据库,其中包含许多基于布尔值的记录,因此表结构如下所示:

===Table===
ID <- int
Name <- string
Bool1 <- bool
Bool2 <- bool
Bool3 <- bool
Bool4 <- bool
Bool5 <- bool
Bool6 <- bool
Bool7 <- bool
Bool8 <- bool
Bool9 <- bool
Run Code Online (Sandbox Code Playgroud)

并非所有布尔值都设置为一次,因此每条记录可以选择一个,多个或没有.

我想过做这样的事情:

==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
Run Code Online (Sandbox Code Playgroud)

因此,在ValueID上加入的主表和第二表之间存在一对多的关系.因此第二个表只包含所选项的数据,而不是主表中的一组空布尔值.

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

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

我真的希望能够将它绑定到带有复选框的表单,这会使这很难.

因此,如果这有点难以理解我需要什么,我真的不知道如何在文本中解释它.

谢谢.

Mat*_*lls 15

保持原状!

数据库将非常有效地打包多个位字段.我见过人们做的事情就像拥有一个32位的int字段,因此允许他们使用bitmasking存储他们的17个布尔值,并"为其他字段留出一些空间".这只是愚蠢的,这是一个维护噩梦,你的查询充斥着bitmasks使他们难以维护.

我将重申,保持简单,只需要布尔列.如果您需要新列,请添加它.您无需创建单独的表.