MySQL - 为每个父对象保留一系列子对象的ID

时间:2016-10-17 15:10:06

标签: mysql ruby-on-rails activerecord

我有公司,每家公司都有多个产品。模型有以下关系 -

类公司<的ActiveRecord :: Base的   has_many:产品 结束 类产品<的ActiveRecord :: Base的   belongs_to:公司 端

我想为每家公司保留1000个产品ID。

所以

  • Company1的产品ID可以是1-1000
  • Company2的产品ID可以是1001-2000

我想为每个公司保留Products表的PRIMARY键,而不是使用范围主键和重复ID(因为消费者/公司可以记住产品ID并使用url'... / product / 1000'访问它)

我想到的解决方案 - 我应该创建多个序列(每个公司在创建公司时都会创建一个序列)。默认值为(Company.ID -1)* 1000 + 1。 在为公司创建产品时,使用nextval作为此序列。我确信公司将不会在系统中拥有1000个产品(不太可能)。

你能建议一个更好的方法吗?

1 个答案:

答案 0 :(得分:1)

你的计划并不好。如果您有50家公司,每家公司有5个产品,那么现在您的数据库中有50,000行。数据库始终处理此类问题。不要指望您的客户记住数据库ID。让他们轻松找到ID。

你应该在这样的轨道中组织模型:

class Company < ApplicationRecord
  has_many :products
end
class Products < ApplicationRecord
  belongs_to :company
end

尝试并描绘您的规范变化如何产生新问题,以及您是否会因为偏离规范而过度使用。在您的情况下,如果一家公司有1001种产品,那么您就为自己创造了更多的工作。