2016-10-17 4 views
-1

私は会社を持ち、各社には複数の製品があります。モデルは以下のいるrelation-MySQL - 各親オブジェクトの子オブジェクトのIDの範囲を予約します

クラスの会社<はActiveRecord ::ベース にhas_many:製品 エンド クラスの製品<はActiveRecord ::ベース belongs_toの:会社

が、私は、各会社のために1000個のIDを予約したい 終了。

ので

  • Company1のは、私はそれぞれの製品のテーブルの主キーを予約したい
  • Company2のは、1001年から2000年

から製品IDを持つことができ1-1000から製品IDを持つことができます(消費者/企業は製品IDを覚えてURL '.../product/1000'を使用してアクセスできるので)主キーと重複IDのスコープを持つのではなく、

解決策私は心に留めています。 複数のシーケンスを作成する必要があります(会社の作成時および作成時に、それぞれの会社に1つずつ)。デフォルト値は(Company.ID -1)* 1000 + 1です。 会社1の製品が作成されたときにこのシーケンスにnextvalを使用します。

あなたはより良いアプローチを提案できますか?

+0

なぜそれをしたいですか?ちょうど普通のことをするhas_many <->は団体に属します –

+0

has_manyが既にあり、関連に属しています。企業が製品にアクセスすることは容易になります。アプリケーションのどこにでも製品IDが表示されます(名前はありません)。 –

答えて

1

あなたの計画はあまり良くありません。 5つの製品をそれぞれ50社持っている場合、データベースには50,000行があります。データベースは常にこの種の問題を処理します。データベースIDを覚えている顧客にはカウントしないでください。 idsを簡単に見つけることができます。

あなたは、このようなレールであなたのモデルを整理する必要があります。

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

試してみて、どのように規範からの変更が新たな問題を作成して画像とあなたが規範からの逸脱を考えるあなたの日のための重要な弾みがつくかどうか。あなたのケースでは、会社が1001製品を持っていれば、あなたはもっと多くの仕事を自分で作成しました。

+0

協会があります。製品には名前がなく、IDで識別され、システム全体のUIにIDが表示されます。製品はあまりにも多くのパラメータによって識別され、私はそれから名前を作ることはできません(ユーザーは既にIDから製品を識別することに精通しています)... –

+0

1001製品の会社にはどのように対処していますか? – user3456978

+0

おそらく次の使用可能なIDブロックを割り当てる必要があります...ポインタを探している完璧な解決策はありません。これはビジネスの要件です。 :( –

関連する問題