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


MySQL database structure to store items with multiple available options

我之前问过这个问题,但是找不到答案。首先为我的英语道歉。

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

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

我应该使用内爆()并像

那样存储它们吗?
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

您应该有一个选项表、一个用户表和一个关联它们的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

最好的办法就是这样

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

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

编辑:

但是,如果复选框是动态的,并且您希望能够从列表中添加/删除复选框,那么您可能希望设置N:M关系,其中表中的每一行都可以为每个复选框提供一个值。这将需要一个单独的表来存储复选框,并需要一个中间表来存储表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 |
+-----+-------+-------+