gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中实现复合主键

转载 作者:数据小太阳 更新时间:2023-10-29 06:52:16 25 4
gpt4 key购买 nike

我有一个如下所示的 User 模型:

class User < ApplicationRecord
belongs_to :organization
belongs_to :department
end

数据库中的users 表有两个外键organization_iddepartment_id。如何使这两列成为复合主键?到目前为止,我在网上看到了两种方法:

选项1

使用 composite_primary_keys gem

选项 2

使用如下方式为两列中的每一列添加索引:

add_index :users, [:organization_id, :department_id], unique: true

我的问题

users 表中唯一标识一行的最佳方法是什么,其中一行必须按顺序具有 department_idorganization_id被唯一识别?索引两列和简单地使每一列成为表的主键有什么区别?

谢谢!

最佳答案

添加索引。

在 Rails 中,如果你有 id 作为主键,一切都会更好。

可能违背系统...但最好不要这样做,除非您真的知道自己在做什么 - 如果您问索引和键之间的区别是什么,然后你就不知道了...这很酷改变一些根本的东西。因为使用 id 以外的任何东西作为主键都比较困难。东西坏了更多。您将不得不在不了解它们为什么会损坏以及为什么您首先需要它们的情况下修复它...

id 作为主键并还有约束确保您拥有唯一的 organisation_id+department_id...

注意:我假设您不知道索引/主键之间的区别——这个假设可能不成立,但它是您提问方式的产物……如果是这样,我深表歉意。 :)在那种情况下...不同之处在于,如果您只是使用它期望的东西,Rails 会为您做各种神奇的事情...如果您不使用它,它就是一个 PITA。

否则……主键是唯一标识的信息位。您可能认为 org_id/dept_id 永远不会改变......但你会惊讶于现实生活中真实世界数据的变化频率......以及更新整个数据库的关系值时会带来多大的痛苦确实……

唯一索引 (OTOH) 以您想要的方式很好地限制数据...如果有人决定部门 42 现在必须是部门 23,则无需更新内容的麻烦。此外,索引让您可以比对整个数据库进行行扫描更快地按该列对查找数据。

关于ruby-on-rails - 如何在 Rails 中实现复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com