0

我正在构建一个包含大量类别的网站,每个类别都有自己的特定表单字段。因为类别太多,我想将这些表单字段存储在数据库中。

  1. 类别存储在一个category表中:

    id | name
    -------------
    1  | Car info
    
  2. 该类别的字段存储在category_field表中:

    id | fk_id_category | type  | label
    -------------------------------------------------------------
    1  | 1              | text  | Your name
    2  | 1              | radio | What type of car do your drive?
    
  3. 如果 acategory_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.typeradio,我想将外键保存到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)。

4

1 回答 1

0

你不能因为外键的整个想法是为了防止这种情况。您可以将其存储为一个没有强制外键的字段,或者创建两列,一列用于外键 id(可能是与“用户定义”相关的默认值),另一列采用用户定义的信息,并且可能是默认值为空。

于 2013-01-14T03:40:49.873 回答