【问题标题】:Rails multitable id incrementationRails 多表 id 递增
【发布时间】:2015-10-23 10:37:45
【问题描述】:

我有一个使用 Postgres 的 rails 应用程序 - 我需要一些表本质上具有相同的数据。所以我需要一个唯一的键,为我的所有表增加,所以实际上所有表的 id 都有一个 pk 约束。 现在,问题是——我该怎么做?我可以编写一个迁移来定义所有表的 id 以在每次插入这些表时递增吗?还是我必须在数据库级别进行?

【问题讨论】:

  • 听起来你正在尝试做一些你不应该做的事情。如果您需要约束多个表中的列,那么必须在它们之间建立关联,这是一种在它们之间创建外键的方法。在这种情况下,您应该将递增列保留在一个表(可能是一个新表)中,并从其他表中引用它的外键。
  • 完全同意奥格兹巫师的观点。我真的不明白这里的需要。单表继承或has_one 关系应该可以工作。

标签: ruby-on-rails postgresql ruby-on-rails-4


【解决方案1】:

如果两个表之间有这样的链接,则不应使它们具有相同的主键。这不是数据库的好用处。

您应该为其中一个表赋予另一个表的外键,并使用此关系来识别两个表之间的链接行。

在 Rails 中,它被称为“has_one”关系,非常方便:http://guides.rubyonrails.org/association_basics.html#the-has-one-association

【讨论】:

  • 我真的不同意,当您有两个表时,您只有联合/减号/拦截用于查询 - 为了在它们之间进行选择,没有外键的意义。
  • 为什么你需要有两个完全相同的表,相同的列(如果你合并它们,我猜它们有相同的列)和相同的数据?
  • 把它想象成一个 STI,你不会用不相关的数据浪费空间——而 MTI 也不适合我的情况——因为每个表都是独立的,而且效率很低查询多个表并与一个表进行比较。
  • 那为什么不只使用一张带有 STI 的表呢?我不明白您的“浪费空间”论点,您的两张表占用的空间与一张包含所有行的表所占用的空间完全相同。如果您索引 STI 的 type 列,您可以保持查询效率。
  • 因为我没有相同的数据 - 我合并表并仍然使用表中的数据查询要显示的结果 - 所选列与 where 条件不同 - 一个 STI表将有许多空列。
猜你喜欢
  • 1970-01-01
  • 2017-08-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2010-10-04
相关资源
最近更新 更多