2013-01-14 41 views
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. 如果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.typetext我們應該回答保存爲字符串

    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)。

+1

謝謝你指出,我不知道。 –

回答

0

你不能因爲外鍵的整個想法是爲了防止這種情況。您可以將它作爲一個字段存儲,而不必強制使用外鍵,或者創建兩列,一列用於外鍵ID(可能是與「用戶定義」相關的默認值),另一列使用用戶定義的信息,可能還有默認值爲空。

+0

謝謝!有一件事,你的意思是什麼?或者默認值與'用戶定義'有關?爲什麼外鍵ID不能爲NULL? –

+0

據我所知,NULL將是一個有效的值。所以這應該也是一樣。 – Ilion

相關問題