如何在 rails 中正确维护数据库架构?
How to correctly maintain database schema in rails?
我有这样的架构:
create_table "grades", force: :cascade do |t|
t.integer "cls"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "post_grades", force: :cascade do |t|
t.integer "post_id"
t.integer "grade_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "posts", force: :cascade do |t|
t.integer "user_id", null: false
t.string "title"
t.text "content"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "user_grades", force: :cascade do |t|
t.integer "user_id"
t.integer "grade_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
在此模式中,成绩、帖子和用户都相互关联。
所以我的第一个问题:这样做是否正确?
假设其中一个用户在他的列中添加了等级 4 (cls = 4),而另一个用户添加了相同的等级。现在,对于两个不同的等级 ids.So,我在等级 table 中具有相同的 cls 值 ids.So 此架构中是否存在任何数据冗余?
因为我接到了你的任务,你可以采用这样的解决方案:
grades
-> 没有引用(就像现在一样)
user_grades
(命名此 table 的常规方式是 grades_users
... 按字母顺序且均为复数形式)-> user_id
、grade_id
(就像现在一样)
- 你不需要
post_grades
。多余
posts
-> grade_id
, user_id
(如果需要作者)
您的 schema.rb
看起来像:
create_table "users", force: :cascade do |t|
...
end
create_table "grades_users", force: :cascade do |t|
t.integer "user_id"
t.integer "grade_id"
...
end
create_table "grades", force: :cascade do |t|
...
end
create_table "posts", force: :cascade do |t|
t.integer "user_id", null: false
t.integer "grade_id", null: false
...
end
我有这样的架构:
create_table "grades", force: :cascade do |t|
t.integer "cls"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "post_grades", force: :cascade do |t|
t.integer "post_id"
t.integer "grade_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "posts", force: :cascade do |t|
t.integer "user_id", null: false
t.string "title"
t.text "content"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "user_grades", force: :cascade do |t|
t.integer "user_id"
t.integer "grade_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
在此模式中,成绩、帖子和用户都相互关联。
所以我的第一个问题:这样做是否正确?
假设其中一个用户在他的列中添加了等级 4 (cls = 4),而另一个用户添加了相同的等级。现在,对于两个不同的等级 ids.So,我在等级 table 中具有相同的 cls 值 ids.So 此架构中是否存在任何数据冗余?
因为我接到了你的任务,你可以采用这样的解决方案:
grades
-> 没有引用(就像现在一样)user_grades
(命名此 table 的常规方式是grades_users
... 按字母顺序且均为复数形式)->user_id
、grade_id
(就像现在一样)- 你不需要
post_grades
。多余 posts
->grade_id
,user_id
(如果需要作者)
您的 schema.rb
看起来像:
create_table "users", force: :cascade do |t|
...
end
create_table "grades_users", force: :cascade do |t|
t.integer "user_id"
t.integer "grade_id"
...
end
create_table "grades", force: :cascade do |t|
...
end
create_table "posts", force: :cascade do |t|
t.integer "user_id", null: false
t.integer "grade_id", null: false
...
end