我正在构建一个包含大量类别的网站,每个类别都有自己的特定表单字段。因为有这么多类别,我想将这些表单字段存储在数据库中。
类别存储在category
表中:
id | name
-------------
1 | Car info
该类别的字段存储在category_field
表中:
id | fk_id_category | type | label
-------------------------------------------------------------
1 | 1 | text | Your name
2 | 1 | radio | What type of car do your drive?
如果category_field
有一些用户可以选择的预定义选项,那么这些选项会存储在category_field_option
表中:
id | fk_id_category_field | label
-----------------------------------------
1 | 2 | 'Convertible'
2 | 2 | 'Truck'
3 | 2 | 'Minivan'
现在,当用户填写表单时,我们要在form_entry
表中保存对此的引用:
id | fk_id_user | fk_id_category
--------------------------------
1 | 1 | 1
该表单条目的详细信息保存在form_entry_details
表中。但是:
如果category_field.type
为text
,我们应该将答案保存为字符串
id | fk_id_form_entry | fk_id_category_field | [answer]
-------------------------------------------------------
1 | 1 | 1 | John Doe
如果category_field.type
为radio
,我想将外键保存到category_field_option
id | fk_id_form_entry | fk_id_category_field | [fk_id_category_field_option]
--------------------------------------------------------------------------
2 | 1 | 2 | 2
我该如何解决这个问题?我知道我可以将fk_id_category_field_option
存储为字符串,但我需要它实际引用category_field_option
表,因为我使用的是ORM(Doctrine 1.2.4)。
答案 0 :(得分:0)
你不能因为外键的整个想法是为了防止这种情况。您可以将其存储为一个字段而不强制执行外键,或者创建两个列,一个用于外键id(可能是与“用户定义”相关的默认值),另一个用于获取用户定义的信息,可能还有默认值为空。