我不确定以前是否有人问过这种问题,但我进行了搜索并找到了任何东西。
我目前正在处理一个数据库,该数据库的记录中存储了大量基于 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/