我创建了一个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%>
那么,我应该做什么来分割用户或保持原样呢?
提前致谢!
答案 0 :(得分:2)
对于您的业务逻辑,创建表'地址'可能会很好,因为将来您的users
可能会有超过1个地址。
从sql
点开始,您应该制作新表格addresses
,但我反对构建您的表格,因为有些rule
规范了您的db
模型。在您的情况下,address
不会对您的db
现在你可以将你的地址保存在user
记录中,它不会损害你的数据库,并且会加快你的渲染时间(即使是几毫秒)。
您必须在rendering
您的观看次数和normalizing
您的db
中找到余额。如果添加addresses
表,则模型对于进一步更改将更具弹性。实施新功能或与users
及其addresses
相关的任何内容。
总而言之,这取决于您的实施,业务模式,要求等等。你必须找到最能满足你需求的平衡