我设计了一个以短链接为中心的数据库。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