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使他们难以维护.
我将重申,保持简单,只需要布尔列.如果您需要新列,请添加它.您无需创建单独的表.