gpt4 book ai didi

sql - 使外键也成为 Rails 迁移中的主键

转载 作者:太空狗 更新时间:2023-10-30 01:55:59 26 4
gpt4 key购买 nike

编辑:

从 Rails 的角度来看,我希望一个列是主键和外键。也就是说使用 references 方法的外键。我想做类似的事情:

def change
create_table :VipPerson, id: false do |t|
t.primary_key :person_id
t.references :person, :id, column: :person_id

t.timestamps
end
end

我想要一个自定义主键,Rails 模型也使用它来指向 Person 模型(见下文)。这实际上与 sql 数据库使用的外键无关(正如 Demi Magus 所指出的,Rails 直到 Rails 4.2 才支持创建真正的外键)。

-

我想在我的 Rails 项目中实现多表交互 (MTI),从而像通常在关系数据库中那样实现继承:

table: Person
-------------
(PK) ID
Name
...

table: VipPerson (specalization of Person)
----------------
(PK) (FK) Person_ID
VIP-Status
...

为此,我需要编写一个迁移,将属性(此处为 Person_ID)同时声明为(自定义)主键和外键。我没有看到如何使用 Rails 的迁移 DSP 的方法来做到这一点。

我不想使用 Rails 的多态关联,因为我想保证数据库中的数据完整性。我知道我还需要自定义 Rails 模型,但我们先不谈这个话题。主要问题是如何编写使 PK 也成为 FK(反之亦然)的迁移。

最佳答案

外键关系仅适用于最新版本的 rails,如您在 release notes 中所见,为 4.2。 ,你可以像这样使用它

创建一个简单的外键

add_foreign_key :articles, :authors

生成:

ALTER TABLE "articles" ADD CONSTRAINT articles_author_id_fk FOREIGN KEY ("author_id") REFERENCES "authors" ("id")

您还应该知道 add_foreign_key 只会生成一个外键约束,而不是像 activerecord add_column 那样生成一个列

add_column :articles, :author_id, :integer

将生成:

ALTER TABLE "articles" ADD COLUMN author_id INT(11);

您可以找到更多信息 here

此外,如果您不只是在寻找 rails 的边缘,那么您会发现这个有用的 gem 可以让您做您正在寻找的事情,它是 composite_primary_keys ,唯一需要注意的是,您必须使用与您的 Rails 版本兼容的版本。

希望对你有帮助:D

关于sql - 使外键也成为 Rails 迁移中的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27883934/

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