2015-04-06 47 views
0

我正在構建提供培訓課程的網站。每次培訓都由一系列培訓幻燈片組成。目前有4種不同的幻燈片類型,但這可能會擴大。滑動類型具有以下數據(括號中的類型):如何構建相關內容類型的數據庫

類型1
摘要(文本)
目標(文本)

類型2
標題(VARCHAR)
字幕(varchar)

類型3
t書名(VARCHAR)
內容(文本)

類型4
標題(VARCHAR)
介紹(文本)
問題(VARCHAR)

我不知道什麼樣的最佳方式是在數據庫中構建這個。我看到以下可能的選擇:

  1. 使用包含列於所有滑動類型的單個表,其中一個附加列指定滑動型
  2. 使用包含列只是共享數據類型的單個表,並使用附加表制定的非標準場(我認爲的Drupal確實是這樣,不是嗎?)
  3. 每張幻燈片的類型使用不同的表

問題
3任何時候我都希望爲單個訓練組裝所有幻燈片,而需要大量表連接,而#1會導致表中有大量空值的列。我應該如何權衡這些問題?這種情況是否有標準的最佳實踐指導方針?

附加註意事項
- Slide Type 4也將具有與其相關聯的選擇題,以及與每個答案選項相關聯的不同的反饋(例如,用戶選擇並回答和反饋在屏幕上彈出)。 - 我在Rails中構建這個。不知道這是否也很重要。 - 我不希望我的網站擁有超過1000張幻燈片,但我有興趣瞭解幻燈片的數量如何影響最佳方法。

回答

1

鑑於2,3和4類型都有相似之處,我認爲根據幻燈片製作一個幻燈片類型並重新使用名稱是值得的。您甚至可以將該類型指定爲表格的一部分。然後,當您展開幻燈片時,只需將幻燈片表移至新值即可。我相信這是一個可怕的想法的唯一時間是如果你期望數據庫中的值過多。例如,如果您擁有數百萬張幻燈片,那麼浪費的數據量可能會成爲問題,但對於簡化邏輯的簡單解決方案而言,最好使用一張表。

這將是我對這個所謂的幻燈片的遷移建議。

類型2,3和4共享SLIDE_TITLE這是標題

目標,內容和介紹都是文字,使他們能夠在我看來共享。它們也是通用描述,所以類型會決定它的含義。所以,這被稱爲slide_description。

create_table :slides do |t| 
    t.column :slide_id, :string, :limit => 36, :null => false 
    t.column :slide_title, :string, :limit => 64 
    t.column :slide_description, :text 
    t.column :slide_goals, :text 
    t.column :slide_summary, :text 
    t.column :slide_type, :integer, :null => false 
    t.column :created_at, :datetime 
    t.column :updated_at, :datetime 
end 

現在,每張幻燈片都應具有與其關聯的問題,以便每張幻燈片都有一個問題。這樣,如果您需要在其他地方使用它們,或者由於活動記錄而以面向對象的方式更改飛行問題,您可以稍後解除幻燈片中的問題。

create_table :questions do |t| 
    t.column :question_id, :string, :limit => 36, :null => false 
    t.column :question_title, :string, :limit => 64 

    //Other things for questions 

    t.column :created_at, :datetime 
    t.column :updated_at, :datetime 
end 
相關問題