具有多個外鍵表的對象的 db 模式
我有一個問題表,其中包含
question_id
和question_text
(choice_type_id
比如自由文本、二元選擇和多項選擇)現在,問題表(具有
question_id, question_text, choice_type_id
)具有選擇類型表( )的外鍵choice_type_id, choice_type_desc
。現在所有不同的選擇類型都有不同的模式。對於多項選擇,我想針對一個問題儲存多項選擇欄位。對於二元選擇,我想針對一個問題儲存兩個選擇,對於自由文本,我別無選擇。
如何根據問題的類型填充問題的選擇,並在 db.xml 之類的 sql 中對此進行建模。我還希望看到使用者與每個問題的互動以及該問題中的選擇(即使用者選擇了哪些選擇或為給定問題輸入了哪些文本)
我可以將
question_choice
表建模為一個大表,它可以具有所有三種類型,並且基於類型,某些列可以具有值,而所有其他列保持為空。這將是一個非常稀疏的表示,我不確定這將如何擴展。
考慮到我想要快速閱讀並且問題類型將繼續增加,最好的模式設計是什麼。
只需在您的模型中為您的欄位
choice_type_id
本質上是一種分區屬性的每種選擇類型包含一個選擇表。它表示適用的子表類型。到目前為止,您有三個表:
MULTIPLE_CHOICE
、BINARY_CHOICE
和FREE_TEXT
(儘管您可能認為二元選擇是多項選擇的特例)。這些表中的每一個都是您的表的子
QUESTION
表,即它們都有一個question_id
外鍵。多項選擇表將有多個記錄指向,QUESTION
而其他表將有一個 - 取決於您如何建模二元選擇。請注意,可以使用視圖將這種物理排列展平,使其看起來像一張大表,其中包含您想要避免的稀疏列。一個大的扁平(稀疏)表可能便於報告,但由於您擔心規模,您可能希望避免使用稀疏表進行物理儲存。
您的使用者答案表將是
USER
與適當選項相交的各種選項表的子項,因為每個問題都由多個使用者回答。