【发布时间】:2012-10-26 14:30:12
【问题描述】:
您好,
我有一个表单,它有近 150 个复选框,但它们不在一个地方,表单分为多个部分,每个部分都有块,复选框根据它们的组放在这些块中
你可以在这个地方找到四个复选框,在其他地方找到八个,在其他地方找到 30 个,等等。
所以我做了一个两个表来存储组,另一个来存储复选框以及它们属于哪个组。
FormBlocks
--------------------------
| ID | key |
--------------------------
| 1 | property_type |
| 2 | providors |
--------------------------
BlocksCheckBoxes
------------------------------------------------
| ID | Label | Key | FormBlockId |
------------------------------------------------
| 1 | Sweet Home | home | 1 |
| 2 | Farm | farm | 1 |
| 3 | Invst Bank | bank | 2 |
| 4 | Constructor | constr | 2 |
------------------------------------------------
我有两种方法来存储它们的值:
第一个将复选框值存储为其键的串联字符串,并将其直接插入指定的表中,例如:
UserProperties
----------------------------------------
| ID | Customer | PropertiesType |
----------------------------------------
| 1 | Cat | home,farm |
----------------------------------------
优点:非常容易实现,我只需要添加一个列就可以了,理论上它更快
缺点:将失去数据库级别的数据完整性,这将取决于应用程序级别(我想我可以忍受)
我为每个块创建表的第二种方式,例如:
UserProperties
---------------------
| ID | Customer |
---------------------
| 1 | Cat |
---------------------
UserPropertiesTypes
--------------------------------------
| ID | CustomerId | CheckBoxId |
--------------------------------------
| 1 | 1 | 1 |
--------------------------------------
| 1 | 1 | 2 |
--------------------------------------
优点:我认为这是专业的方式,将确保数据库级别的数据完整性
缺点:我需要为每个具有复选框组,如果表单中有许多组,这在开发中特别令人头疼。
我没有考虑按位,因为我必须为每个复选框创建一列,而且我认为这对于拥有 30 多个复选框的大组来说效率不高。所以我更喜欢制定一种将在应用程序中实现的方式
如果您有任何建议或更好的方法,请随时告诉。
非常感谢
【问题讨论】:
标签: database forms checkbox bit-manipulation