请参阅下面的UI设计:
一个项目可以有多于一组的复选框和/或下拉列表,如何将这些数据存储在数据库中?
我想出了这个数据库设计:
items
表:
+----+--------------+
| id | name |
+----+--------------+
| 1 | Plain Burger |
+----+--------------+
extra_group
表:
+----+---------+--------+--------------------+--------------+
| id | item_id | name | description | control_type |
+----+---------+--------+--------------------+--------------+
| 1 | 1 | Sauces | | checkboxes |
| 2 | 1 | extras | Choose your extras | dropdown |
+----+---------+--------+--------------------+--------------+
最后extras
表:
+----+----------------+------------------+------+
| id | extra_group_id | value | cost |
+----+----------------+------------------+------+
| 1 | 1 | with Kitchup | 0.00 |
| 2 | 1 | with Mayo | 0.00 |
| 3 | 2 | with Boiled Rice | 0.00 |
| 4 | 2 | with Chips | 0.00 |
+----+----------------+------------------+------+
这是正确的数据库设计方式还是可以改进的方法?
由于
答案 0 :(得分:2)
看起来不错, 我倾向于在item和extra_group之间添加一个表(并从extra_group中删除item_id)
item_extra_group表:
+---------+----------------+
| item_id | extra_group_id |
+---------+----------------+
| 1 | 1 |
| 1 | 2 |
+---------+----------------+
这将使您能够建立多对多关系的模型, 正如我猜你会有很多重复的extra_groups例如(芝士汉堡,培根汉堡)可能会有相同的额外内容?
答案 1 :(得分:1)
那个设计很好。你使用third normal form,这是做这种事情的公认方式。
答案 2 :(得分:1)
以下是您应该做的调整设计的方法,现在非常好,但可以略微改进:
items
表:
+----+--------------+
| id | name |
+----+--------------+
| 1 | Plain Burger |
+----+--------------+
extra_group
表:
+----+---------+--------+--------------------+--------------+
| id | item_id | name | description | control_type |
+----+---------+--------+--------------------+--------------+
| 1 | 1 | Sauces | | checkboxes |
| 2 | 1 | extras | Choose your extras | dropdown |
+----+---------+--------+--------------------+--------------+
新表options
,如下所示:
+-----------+------------------+------+
| 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 |
+----+------+------------------+------+
已修改 extras
表:
+----+----------------+-----------+
| id | extra_group_id | option_id |
+----+----------------+-----------+
| 1 | 1 | 10 |
| 2 | 1 | 11 |
| 3 | 2 | 12 |
| 4 | 2 | 13 |
+----+----------------+-----------+
此设计采用3NF格式,可以使您的数据维护更加简单,并避免额外项目定价不一致的问题。