我是否应该创建新的 table 以在 Rails 中存储用户地址

Should I make new table for storing user's address in Rails

我创建了一个 rails 应用程序并且 我的 "users" table 是这样的

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"

其他 tables states , country , posts

关联性:

user has_many :posts
user belongs_to :state

我有一个 "states" table 用于维护状态名称,其他 stuffs.I 有一个 "posts" table,其中每个用户可以有多个帖子。

显然我更关注用户的位置属性,我也需要在呈现用户的帖子时频繁访问这些属性。

那么,我是否应该将与位置相关的属性分割成新的 table "addresses"

每个用户只有一个地址。

我觉得这个是对的,但我需要执行冗长的链接才能从 posts views

访问这些属性

例如。访问状态,

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

那么,我应该如何处理碎片用户或保持原样?

提前致谢!

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

sql 点你应该创建新的 table addresses 但我反对构建你的 table 因为一些 rule 规范化你的 db 模型。在你的情况下 address 不会伤害你的 db

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

你必须在 rendering 你的观点和 normalizing 你的 db 之间找到平衡。如果您添加 addresses table,您的模型将更能适应进一步的变化。实施新功能,或与 users 及其 addresses.

相关的任何内容

总而言之,这取决于您的实施、业务模型、要求等等。您必须找到最适合您需求的平衡点