我之前问过这个问题,但是找不到答案。首先为我的英语道歉。
我有一个包含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 |
+-----+-------+-------+