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