Database 表单中带有多个复选框的数据库设计

Database 表单中带有多个复选框的数据库设计,database,database-design,Database,Database Design,在表中存储多项选择值的不同方式有哪些?在一个表格中,我有大约30到50个子分区,每个分区有大约5到10个复选框。如何设计数据库,一种方法是存储表中的每个字段,将其设置为true或false,但我发现很难设计的是,如果我这样设计,我最终将拥有大约100列。任何关于优化的见解。对复选框中的值使用xml,而不是使用数据库,怎么样 有几种方法可以解决这个问题。最常见的方法是将选定的值存储在表中 create table division id (pk) name create tabl

在表中存储多项选择值的不同方式有哪些?在一个表格中,我有大约30到50个子分区,每个分区有大约5到10个复选框。如何设计数据库,一种方法是存储表中的每个字段,将其设置为true或false,但我发现很难设计的是,如果我这样设计,我最终将拥有大约100列。任何关于优化的见解。对复选框中的值使用xml,而不是使用数据库,怎么样

有几种方法可以解决这个问题。最常见的方法是将选定的值存储在表中

create table division
    id (pk)
    name

create table option
    id (pk)
    name

create table divisionoption
   division id (pk)
   option id (pk)
使用此模型,您可以添加其他选项,所选选项存储在divisionoption表中

另一种方法是为每个选项分配二进制值,然后对选项求和,并将值存储在单个字段中

create table division
    id (pk)
    name 
    options

create table option
    id (pk) [examples: 1,2,4,8,16...]
    name
当需要保存时,将这些值相加并存储在除法表中。 例子 备选案文1-1 备选案文2-2 备选案文3-4 备选案文4-8 用户选择选项1、2和3。
将值7(1+2+4)保存到除法表中。

有几种方法可以解决此问题。最常见的方法是将选定的值存储在表中

create table division
    id (pk)
    name

create table option
    id (pk)
    name

create table divisionoption
   division id (pk)
   option id (pk)
使用此模型,您可以添加其他选项,所选选项存储在divisionoption表中

另一种方法是为每个选项分配二进制值,然后对选项求和,并将值存储在单个字段中

create table division
    id (pk)
    name 
    options

create table option
    id (pk) [examples: 1,2,4,8,16...]
    name
当需要保存时,将这些值相加并存储在除法表中。 例子 备选案文1-1 备选案文2-2 备选案文3-4 备选案文4-8 用户选择选项1、2和3。
将值7(1+2+4)保存到除法表。

最好的办法是有一个“除法”的主表、一个“子除法”类型的查找表和一个用于将两个表链接在一起的透视表。使用此模式,透视表中的每一行都将代表一个选中的“分割”复选框

下面的模式只是演示性的(因为您并没有指出您使用的是哪种RDBMS),但应该会给您一个想法

division

  • id int(11)无符号非空自动增量
  • 名称varchar(100)不为空
division\u subsection\u linking

  • id int(11)无符号非空自动增量
  • 用户id int(11)未签名
  • 首选项_id int(11)无符号
细分

  • id int(11)无符号非空自动增量
  • 名称varchar(100)不为空

您可以创建一个表单,其中要选择的选项基于
细分
表中的条目,当用户选择“细分”时,您将相应地从
细分(subdivision)细分(subdivision)链接
表中插入/删除。

最好的选择是为“细分”创建一个主表,为“细分”类型创建一个查找表,以及用于将两个表链接在一起的透视表。使用此模式,透视表中的每一行都将代表一个选中的“分割”复选框

下面的模式只是演示性的(因为您并没有指出您使用的是哪种RDBMS),但应该会给您一个想法

division

  • id int(11)无符号非空自动增量
  • 名称varchar(100)不为空
division\u subsection\u linking

  • id int(11)无符号非空自动增量
  • 用户id int(11)未签名
  • 首选项_id int(11)无符号
细分

  • id int(11)无符号非空自动增量
  • 名称varchar(100)不为空

您可以创建一个表单,其中要选择的选项基于
细分
表中的条目,当用户选择“细分”时,您将相应地从
细分(division)细分(division)链接
表中插入/删除。

问问自己您打算如何使用此数据(超出数据输入表单)。在这种情况下,我通常会根据我将如何查询(搜索)它来构造这种类型的东西。问问自己打算如何使用这些数据(除了数据输入表单)。在这种情况下,我通常会根据我将如何查询(搜索)它来构造这种类型的东西。