我应该创建新表来存储用户在Rails中的地址

时间:2015-05-04 13:36:20

标签: ruby-on-rails database sqlite rails-activerecord normalization

我创建了一个rails应用程序和 我的用户"表就像这样

create_table "users", force: :cascade do |t|
t.string   "name"
t.string   "email"
t.string   "password_hash"
t.string   "password_salt"
t.integer  "country_id"
t.integer  "state_id"
t.integer  "pincode"
t.string   "address"
t.string   "phone_no"
t.float    "latitude"
t.float    "longitude"

其他表states , country , posts

关联性:

user has_many :posts
user belongs_to :state

我有一个用于维护州名和其他内容的"states"表。我有一个"posts"表,每个用户可以有多个帖子。

显然,我更关注用户的位置属性,我还需要在渲染用户的帖子时经常访问这些属性。

那么,我应该将与位置相关的属性分解为新表"addresses"吗?

每个用户只有一个地址。

我认为这是正确的,但我需要执行冗长的链接才能从posts views

访问这些属性

实施例。访问状态,

<% @state = State.find(Address.find(User.find(@post.user_id).address_id)).state_id).name%>

那么,我应该做什么来分割用户或保持原样呢?

提前致谢!

1 个答案:

答案 0 :(得分:2)

对于您的业务逻辑,创建表'地址'可能会很好,因为将来您的users可能会有超过1个地址。

sql点开始,您应该制作新表格addresses,但我反对构建您的表格,因为有些rule规范了您的db模型。在您的情况下,address不会对您的db

造成太大伤害

现在你可以将你的地址保存在user记录中,它不会损害你的数据库,并且会加快你的渲染时间(即使是几毫秒)。

您必须在rendering您的观看次数和normalizing您的db中找到余额。如果添加addresses表,则模型对于进一步更改将更具弹性。实施新功能或与users及其addresses相关的任何内容。

总而言之,这取决于您的实施,业务模式,要求等等。你必须找到最能满足你需求的平衡