MySQL数据库结构,用于存储具有多个可用选项的项

时间:2013-01-18 00:35:00

标签: php mysql sql-update checkbox insert-update

我之前问过这个问题,但无法找到答案..首先对不起我的英语..

我有一个包含80个复选框的表单:这些复选框是汽车的选项,
汽车的例子; Mp3播放器| ABS |安全气囊|空调|

用户应从复选框中选择自己的汽车选项并发布..问题是?我应该如何将它们存储在数据库中?顺便说一下,用户应该能够在以后更新它们。

我应该使用implode()并将它们存储为

option1 , option2 , option34 , option45 , option66 ,  in one column

或者像那样

Car_ID | Options | 
155      option2
155      option34
155      option45
155      option66 

(他们应该如何更新?)

或在数据库中打开80列,等等,

Car_ID | Option1 | Option2 | Option3 | Option4 | Option5
155         true     true      false     false     false

2 个答案:

答案 0 :(得分:3)

您应该有一个选项表,一个用户表和一个与之相关的user_options表。这将允许您根据需要轻松修改选项并添加或删除选项。

Users
user_id,username

Options
option_id,option_name

User Options
option_id,user_id

如果每个用户可以拥有多辆汽车,那么它应该是:

Users
user_id,username

Options
option_id,option_name

Cars
car_id,car_name

User_Car_Options
user_id,car_id,option_id

答案 1 :(得分:0)

最好的方式就是那样

+---------+----------+----------+----------+
| Car_ID  | Option1  | Option2  | Option3  |
+---------+----------+----------+----------+
| 1       | TRUE     | FALSE    | NULL     |
| 2       | TRUE     | NULL     | FALSE    |
| 3       | NULL     | TRUE     | FALSE    |
+---------+----------+----------+----------+

(如果您认为这会使原始表格混乱,您也可以简单地将这些列放在一个单独的表中,并在它们之间设置1:N关系)

编辑:

但是,如果复选框是动态的,并且您希望能够从列表中添加/删除框,则可能需要设置N:M关系,其中表中的每一行都可以为每个行设置一个值复选框。 这将需要一个单独的表来存储ceckbox,以及一个中间表来存储表A中每一行的每个复选框的值。 像:

/* Your table */
+-----+
| AID | 
+-----+ 
| 1   |
| 2   |
| 3   | 
+-----+

/* The table for the boxes */
+-------+-------+
| BoxID | Label |
+-------+-------+
| 1     | Box1  |
| 2     | Box2  |
| 3     | Box3  |
+-------+-------+

/* The intermediary table 
 * linking them together */
+-----+-------+-------+
| AID | BoxID | Value |
+-----+-------+-------+
| 1   | 1     | TRUE  |
| 1   | 2     | FALSE |
| 2   | 1     | TRUE  |
| 2   | 3     | FALSE |
| 3   | 2     | TRUE  |
| 3   | 3     | FALSE |
+-----+-------+-------+