【问题标题】:Database design with multiple checkbox in a form表单中具有多个复选框的数据库设计
【发布时间】:2012-01-11 05:28:53
【问题描述】:

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

【问题讨论】:

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

标签: database database-design


【解决方案1】:

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

create table division
    id (pk)
    name

create table option
    id (pk)
    name

create table divisionoption
   division id (pk)
   option id (pk)

使用此模型,您可以添加其他选项,并且选定的选项存储在除法选项表中。

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

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) 保存到除法表中。

【讨论】:

    【解决方案2】:

    最好的办法是有一个用于“分区”的主表、一个用于“细分”类型的查找表,以及一个用于将两个表链接在一起的数据透视表。使用此架构,数据透视表中的每一行都将代表一个选中的“部门”复选框。

    下面的模式只是说明性的(因为你没有指出你正在使用哪个 RDBMS),但应该给你一个想法。

    division

    • id int(11) unsigned not null auto_increment
    • 名称 varchar(100) 不为空

    division_subdivision_linking

    • id int(11) unsigned not null auto_increment
    • user_id int(11) 无符号
    • preference_id int(11) 无符号

    subdivision

    • id int(11) unsigned not null auto_increment
    • 名称 varchar(100) 不为空

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

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 2010-11-13
      • 2017-07-30
      • 1970-01-01
      • 2017-12-20
      • 2011-10-03
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多