Mysql 如何在数据库中存储勾选框/下拉列表?

Mysql 如何在数据库中存储勾选框/下拉列表?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,请参见下面的UI设计: 一个项目可以有一组以上的勾选框和/或下拉列表,如何将这些数据存储在数据库中 我提出了以下数据库设计: 项目表: 额外分组表: +---------+----------------+ | item_id | extra_group_id | +---------+----------------+ | 1 | 1 | | 1 | 2 | +---------+----------------

请参见下面的UI设计:

一个项目可以有一组以上的勾选框和/或下拉列表,如何将这些数据存储在数据库中

我提出了以下数据库设计:

项目表:

额外分组表:

+---------+----------------+
| item_id | extra_group_id | 
+---------+----------------+
|  1      | 1              | 
|  1      | 2              | 
+---------+----------------+
最后是附加表:

这是数据库设计的正确方法还是可以改进的方法


谢谢,这个设计很好。您使用了,这是做这类事情的公认方式。

这种设计很好。您使用了,这是做这类事情的公认方式。

看起来不错, 我倾向于在item和extra_组之间添加一个表,并从extra_组中删除item_id

项目额外分组表:

+---------+----------------+
| item_id | extra_group_id | 
+---------+----------------+
|  1      | 1              | 
|  1      | 2              | 
+---------+----------------+
这将使您能够建模多对多关系, 我猜你会有很多重复的额外食物群,例如奶酪汉堡、培根汉堡可能都有相同的额外食物?

看起来不错, 我倾向于在item和extra_组之间添加一个表,并从extra_组中删除item_id

项目额外分组表:

+---------+----------------+
| item_id | extra_group_id | 
+---------+----------------+
|  1      | 1              | 
|  1      | 2              | 
+---------+----------------+
这将使您能够建模多对多关系,
我猜你会有很多重复的额外食物群,例如奶酪汉堡、培根汉堡可能都会有相同的额外食物?

以下是你应该做的事情来调整你的设计,它现在很好,但可以稍微改进:

项目表:

额外分组表:

+---------+----------------+
| item_id | extra_group_id | 
+---------+----------------+
|  1      | 1              | 
|  1      | 2              | 
+---------+----------------+
新的表格选项如下:

修改的附加表:


此设计采用3NF格式,将使您的数据维护更加简单,并将避免额外项目定价不一致的问题。

以下是您应该如何调整设计的方法,该方法现在非常好,但可以稍微改进:

项目表:

额外分组表:

+---------+----------------+
| item_id | extra_group_id | 
+---------+----------------+
|  1      | 1              | 
|  1      | 2              | 
+---------+----------------+
新的表格选项如下:

修改的附加表:


此设计采用3NF,将使您的数据维护更加简单,并将避免额外项目定价不一致的问题。

将额外项目的价值放入单独的表中,您感觉如何?会有很多额外的重复值。你在说什么值?是否勾选了复选框?为了正确选择3NF,您可能需要另一个类似于extras_菜单的表,该表包含extras中的值和成本字段。然后,extras表将有一个FK to extras_菜单。这是假设额外服务总是有相同的费用,不管他们提供的是什么物品。@Joel:我不同意。将值和成本放入一个新表只会添加一个额外的重定向,而没有任何好处。额外的好处是规范化额外的描述和成本。如果业务规则是,无论您将其添加到何处,额外费用的成本都是相同的,那么额外费用的成本以及名称不取决于额外费用的主键,OP的额外费用表是2NF而不是3NF。另一方面,如果每个额外项目的成本因其添加到的项目而异,并且如果您可以在每个项目上以不同的方式拼写额外项目的名称,那么OP的额外项目表毕竟是3NF,但我怀疑最好将这些属性规范化。您如何看待将额外项目值放入单独的表中?会有很多额外的重复值。你在说什么值?是否勾选了复选框?为了正确选择3NF,您可能需要另一个类似于extras_菜单的表,该表包含extras中的值和成本字段。然后,extras表将有一个FK to extras_菜单。这是假设额外服务总是有相同的费用,不管他们提供的是什么物品。@Joel:我不同意。将值和成本放入一个新表只会添加一个额外的重定向,而没有任何好处。额外的好处是规范化额外的描述和成本。如果业务规则是,无论您将其添加到何处,额外费用的成本都是相同的,那么额外费用的成本以及名称不取决于额外费用的主键,OP的额外费用表是2NF而不是3NF。另一方面,如果每个额外物品的成本因其添加到的物品而异,并且如果您可以在每个物品上以不同的方式拼写额外物品的名称,那么OP的额外物品表毕竟是3NF,但我怀疑最好将这些属性规范化。这是一个非常好的主意!是的,对于奶酪汉堡、鸡肉汉堡等,我会有很多重复的额外分组。谢谢。这是一个关于在额外分组的定义上节省一些重复分组维护的好发现+1,但它没有解决额外分组表仍然只有2NF的事实。这是一个非常好的主意!是的,对于奶酪汉堡、鸡肉汉堡等,我会有很多重复的额外分组。谢谢。这是一个很好的捕获+1,可以节省额外分组定义中重复分组的维护,但它没有解决额外分组表仍然只有2NF的事实。
+----+---------+--------+--------------------+--------------+ 
| id | item_id | name   | description        | control_type | 
+----+---------+--------+--------------------+--------------+ 
|  1 |       1 | Sauces |                    | checkboxes   | 
|  2 |       1 | extras | Choose your extras | dropdown     | 
+----+---------+--------+--------------------+--------------+ 
+-----------+------------------+------+ 
| option_id | description      | cost | 
+-----------+------------------+------+ 
|  10       | with Kitchup     | 0.00 | 
|  11       | with Mayo        | 0.00 | 
|  12       | with Boiled Rice | 0.00 | 
|  13       | with Chips       | 0.00 | 
+----+------+------------------+------+ 
+----+----------------+-----------+
| id | extra_group_id | option_id |
+----+----------------+-----------+ 
|  1 |              1 |        10 |
|  2 |              1 |        11 |
|  3 |              2 |        12 | 
|  4 |              2 |        13 | 
+----+----------------+-----------+