1

私は、多レベル項目の製造における特定の活動を記録するトレーサビリティシステムを開発しています。 grand-parentアイテムは、2つまたは4つの親アイテムで構成され、2つの子アイテムから構成されます。各レベルでデータベース構造の質問:祖父母/親子テーブルとの関係を持つテーブル

、製造プロセスの様々な時点で、リークテストがアイテムの全ての3つのタイプに行われる - それぞれに対して記録された情報が同じになります、リークレートのパス又はフェイルフラグ、タイムスタンプ等

PK: LeakTestID, Int 
FK: LeakTestItemID, Int 
FK: LeakTestTypeID, Int 
LeakageRate, Float 
Result, Bit 

は、だから私はFKが参照され、テーブル表示するインジケータと一緒に、テストが関連アイテムのIDを保持するための一般的なFKフィールドで、1つのLeakTestsテーブルを選びますか異なるタイプのFKを別のフィールドに保管していますか?

PK: LeakTestID, Int 
FK: ChildID, Int 
FK: ParentID, Int 
FK: GrandparentID, Int 
LeakageRate, Float 
Result, Bit 

また、アイテムのレベルごとに1つずつ、3つのリークテストテーブルを選択しますか?

私はさまざまな長所と短所をそれぞれ見ることができます。私は何度か自分の考えを変えました。

どのような考えですか?私はこのシステムの要件がほとんど定義されておらず、私の仕事の一部はビジネスと川下の顧客と、両面を下ろすために取り組むことです。しかし、そのままでは、どのようにデータが使用されるのか、要件が変わる可能性があるかどうかはわかりません。

明確化:私はG-親/親/子ビットが投げた人だと思う - 3つの階層は同じ階層ではありません、彼らは完全に異なっている、例えば:

ATS: 
PK: ATSID, Int 
MeasurementA char() 
MeasurementB char() 
MeasurementC char() 

SleevedPair: 
PK: SleevedPairID, Int 
MeasurementD char() 
MeasurementE char() 

SleevedItem: 
PK: SleevedItemID 
MeasurementG char() 
MeasurementH char() 
MeasurementI char() 
MeasurementJ char() 
MeasurementK char() 

...それだけ各オブジェクトに1つ以上のリークテストが関連付けられていることがあります。

+0

私は質問の中で特異性の欠如を明示する上での要件が明確でないと思います。 –

+0

これは問題を明確にします。あなたは言った: "リークテストは、3つのタイプのアイテムすべてについて実行されます - それぞれに対して記録された情報は同じです:"それは、 "アセンブリ"のすべてのアイテムに適用される1つのテスト...アセンブリのPERアイテム? –

+0

@Stephanie - 最初に、SleevedItemはリークテストを受けます。その後、別のSleevedItemに参加してSleevedPairを作成します。SleevedPairもリークテストされます。そして、いくつかのSleevedPairsがATSに適合し、さらに5つのリークテストがあります。いずれの場合も、リークテストが失敗した場合、そのアイテムは再加工され、リークテストされます。私はこれがすべてをクリアすることを願っています。 – CJM

答えて

1

確かにそれぞれに利点がありますが、私はあなたの最後のオプションが好きだと思う、オブジェクトの各レベルのリークテーブルを使用します。

最初の構造体は、型IDを識別し、itemIDはまともですが、3つの別々のものよりも大きく、使いにくい表になります。

2番目のオプションは不要なフィールドを持つことがあります。これまでの祖父母レベルのオブジェクトでは、親と祖父母の両方をログに記録する必要があるすべての子の場合と同様に、親と子のnullを記録する必要がありました。おそらく他の場所に存在する情報です。

私は専門家ではありませんが、ちょうど私の2セントです。

+0

私は同様の行に沿って考えています。オプション2は混乱です。最初はうまくいくが、あまりにも標準化が進んでいるのだろうか? 3リークテストテーブルのオプションは簡単ですが、3つのテーブルをすべて組み合わせることもできます。本質的に、それは問題ではありません - 私は1と3がうまくいくと思います。私はベストプラクティスとして不思議です。 – CJM

+0

あなたは確かにそれらを組み合わせることができます、そして、テーブルが小さく索引が付いているなら、パフォーマンスはおそらくほぼ同じでしょう。しかし、実際にそれを行う理由はありますか?複数のレベルの結果が必要な場合は、常に3つのテーブルに参加することができますが、1つのレベルだけが必要な場合は、小さいテーブルを1つ使用するだけで済みます。 – Colin

0

私の祖父母(スティーブ)は私の親(アン)親です。

ID  Name  ParentID 
1  Steve 
2  Anne  1 
3  Steph  2 
4  Amy  3 
5  Sue  3 

私は私の親の親をチェックして、私の祖父スティーブを導き出すことができ

ID  Name  ParentID GparentID ChildID 
1  Steve 
2  Anne  1 
3  Steph  2   1   4 
4  Amy  .... 

を保存する理由はありません。 同様に、ID(ParentID = 3)の最初のテーブルのparentID列をチェックするだけで、私の娘がAmyとSueである必要はありません。これらの曖昧な要件が変化すると、これは最終的に柔軟性があります。階層がサポートしないのは、複数の親だけです。すべてのノードが最大で1つの子を持つことができない限り、ツリーを反転してparentIDをChildIDとして定義し、子ごとに複数の親を持つことができます。しかし、親1人だけです。多くの親と多くの子が必要な場合は、多対多マッピングテーブルが必要です。