Schema

具有多個外鍵表的對象的 db 模式

  • March 23, 2015

我有一個問題表,其中包含question_idquestion_textchoice_type_id比如自由文本、二元選擇和多項選擇)

現在,問題表(具有question_id, question_text, choice_type_id)具有選擇類型表( )的外鍵choice_type_id, choice_type_desc。現在所有不同的選擇類型都有不同的模式。

對於多項選擇,我想針對一個問題儲存多項選擇欄位。對於二元選擇,我想針對一個問題儲存兩個選擇,對於自由文本,我別無選擇。

如何根據問題的類型填充問題的選擇,並在 db.xml 之類的 sql 中對此進行建模。我還希望看到使用者與每個問題的互動以及該問題中的選擇(即使用者選擇了哪些選擇或為給定問題輸入了哪些文本)

我可以將question_choice表建模為一個大表,它可以具有所有三種類型,並且基於類型,某些列可以具有值,而所有其他列保持為空。

這將是一個非常稀疏的表示,我不確定這將如何擴展。

考慮到我想要快速閱讀並且問題類型將繼續增加,最好的模式設計是什麼。

只需在您的模型中為您的欄位choice_type_id本質上是一種分區屬性的每種選擇類型包含一個選擇表。它表示適用的子表類型。

到目前為止,您有三個表:MULTIPLE_CHOICEBINARY_CHOICEFREE_TEXT(儘管您可能認為二元選擇是多項選擇的特例)。

這些表中的每一個都是您的表的子QUESTION表,即它們都有一個question_id外鍵。多項選擇表將有多個記錄指向,QUESTION而其他表將有一個 - 取決於您如何建模二元選擇。

請注意,可以使用視圖將這種物理排列展平,使其看起來像一張大表,其中包含您想要避免的稀疏列。一個大的扁平(稀疏)表可能便於報告,但由於您擔心規模,您可能希望避免使用稀疏表進行物理儲存。

您的使用者答案表將是USER與適當選項相交的各種選項表的子項,因為每個問題都由多個使用者回答。

有關此方法的更多資訊,請參閱我對這個問題的回答以及DBA.SE 上的這個問題。

引用自:https://dba.stackexchange.com/questions/95897