我設計了一個以短鏈接爲中心的數據庫。Rails基於行的數據庫,巨大的請求數
我有以下模式:
create_table "students", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "email"
t.boolean "recruit", default: true
t.boolean "archive", default: false
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "fields", force: :cascade do |t|
t.string "name"
t.integer "index"
t.integer "group_id"
t.string "description"
t.string "options"
t.boolean "hidden"
t.boolean "locked", default: false
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "groups", force: :cascade do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "texts", force: :cascade do |t|
t.integer "student_id"
t.integer "field_id"
t.string "content", default: ""
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "options", force: :cascade do |t|
t.integer "student_id"
t.integer "field_id"
t.string "choice", default: ""
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "addresses", force: :cascade do |t|
t.integer "student_id"
t.integer "field_id"
t.string "address_1", default: ""
t.string "address_2", default: ""
t.string "city", default: ""
t.integer "state_id", default: 1
t.string "zip", default: ""
t.datetime "created_at"
t.datetime "updated_at"
end
這個組織背後的基礎是一個完全靈活的形式。您只需在字段表中添加一個新行,並且該條目在生成學生的表單上定義了一個新問題。組引用選項字段,文本字段或地址。保存數據時,與給定字段關聯的組會告訴我的應用程序將哪個表放入。此係統運行良好。這是非常靈活的,我可以很容易地看到學生有什麼數據的某些選項,我可以基於幾乎任何東西進行查詢。
問題是當我開始顯示學生。我首先查詢我想要展示的學生,然後我必須搜索每個學生的每個領域。這意味着對於500名學生,我基本上有大約2500條查詢。這會殺死性能。
我想知道什麼最好的方式來加入查詢在一起,加快這個系統是?
部分原因是我不能100%確定學生有給定的字段,所以當我現在查詢時,如果數據庫沒有返回任何結果,我可以創建一個。
嗨。我一直在研究SchemaPlus gem,並且似乎將外部約束作爲一個簡單的慣例添加到我的遷移中。只是把我打算成爲外鍵的所有列正式列出來,是否有任何問題?如果由於某種原因導致數據在一端停止存在,那麼認爲它是一個外鍵會導致問題嗎?我有一些行會引用我的主用戶表,並且可能是一個鍵,但它們也可以被刪除。外鍵會導致刪除中的連鎖反應嗎? – 2015-04-08 03:38:03