0

tablet列のあるテーブルがありますperiod_id。テーブルにはtabletテーブルと多対 1 の関係があり、periodテーブルにはperiodテーブルと 1 対多の関係がありsub_periodます。sub_periodでまたはからの単一のエントリを指定できるようにする必要があります。その選択はエントリtabletによって制限されますが、のみに依存するため、できません。これをどのようにモデル化すればよいですか?periodsub_periodperiod

私のモデルでは、tablet各行に 1 つのperiodエントリと 1 つのsub_periodエントリが必要です。と の関係は次のようにperiodなりsub_periodます1:n(期間には多くのサブ期間が含まれる場合がありますが、各サブ期間は 1 つの期間にのみ属することができます)。sub-periodから選択できるようにしたいのは、tablet自分の選択によって制限する必要がありますperiod

tablet編集: と の間にN:1 の関係が必要であることに気付きましたperiod: 多くのタブレットは同じ期間に関連付けることができます。

4

3 に答える 3

2

で null 許容列has_tablet ENUM('1')sub_period作成し、 でUNIQUE制約を作成しますsub_period (period, has_tablet)

has_tablet値のみを受け入れることができます。1つまりNULL、「タブレットを持っている」として期間ごとに 1 つのシーズンを正確に設定できます。periodtotabletは 1 対 1 であるため、to は too を一意に識別しますtablet

このソリューションを使用すると、一定期間、タブレットをまったく設定しないことができます。問題がある場合は、 に追加periodtablettablet (period, sub_period)参照してくださいsub_period (period, sub_period)

これは非正規化ですが、矛盾が生じることはありません (が両方のテーブルperiodで定義されているため)。sub_period

アップデート:

タブレットへの期間は1対多のようです。この場合、ではなくmake tabletreferenceを追加するだけです。関係は、単純な結合によって推移的に推測できます。sub_periodperiodperiod

于 2012-05-31T14:58:17.867 に答える
0

Then you have 2 options:

  • database layer: implement consistency contraints through triggers. after insert or update, if sub_pediod is not a sub_period of the tablet's period, raise the appropriate error.
  • applicative layer: implement the proper GUI to provide the right choices only, whenever it is necessary.

The second option is my favorite whenever it is about non sensitive data (keep in mind somebody could always skip the client interface), because it usually gives me more "range of motion" with how I want to deal with the problem. Of course there are always exceptions...

于 2012-05-31T14:48:55.510 に答える
0

あなたがあなたをモデリングしているとき、通常は 1:1 の関係を作成しません。正規化すると、関係が 1:1 のテーブルをテーブルに一致させることができることに気付くでしょう。これが私の見方です:リレーションを持つ3つのテーブルがあります

  • タブレット1:nサブピリオド
  • タブレット1:1期間

(図のキーは主キーで、赤い記号は外部キーです)

ここに画像の説明を入力

または、 TabletPeriodテーブルを一致させると、モデルは次のようになります。

ここに画像の説明を入力

タブレットは彼のすべての属性で期間を吸収しますが、それはあなた次第です。あなたのニーズに合わせなければならないモデルです。

于 2012-05-31T14:52:23.047 に答える