2016-05-09 19 views
0

SQL Server 2014を使用していますが、私は設計ソリューションを探しています。SQLテーブル整合性

私は完全性を保証するために3つのテーブルを一緒に接続する必要があります。わかりやすくするためにいくつかのテーブルとカラムが削除されています。

enter image description here

グループは、タイプの親です。

Group: Widgets 
Types: Blue Widgets, Red Widgets 

は、私は、例えば、グループ/カテゴリーレベルでデータを格納したい:

Group: Widgets 
Categories: Widgets for men, Widgets for women 

カテゴリーは、私が確保しようとしているので

Type: Blue Widgets 
Category: Widgets for men 

Type: Red Widgets 
Category: Widgets for women 

タイプレベルでcontrainedする必要があります TypeCatに入力するデータは、カテゴリとタイプのグループがGroupCatに存在するという点で有効です。

私はこのためのパターンがあると確信していますが、非DBの人として、私はこれをどのように動作させるか分かりません。

+2

Foreign Keysを見て、彼らはあなたが何をしているのかを理解する必要があります。 –

+0

あなたはリッチですが、必要な性格を確実にする正しい組み合わせを見つけるのに苦労しています。 –

+0

したがって、GroupCatからBlue/Redウィジェット用のTypeCatへのFKが必要です。 TypecatからGroupTypeへのFKで、女性用のウィジェット/ウィジェットを表示しますか? –

答えて

0

あなたの質問に時間がかかり過ぎる危険性があるので、私はあなたがどのように解くのが難しいかを示してみるつもりです。抽象的な名詞の種類 - タイプ、カテゴリ、グループ - をさまざまな組み合わせで使用します。示された表と質問テキストの間の名前を変更します。あなたは鍵が何であるかを述べていません。次に、いくつかの宣言を行い、読者が適切な関連付けと推論を行うことを期待します。

グループはタイプの親です。

したがってGroupIDGroupTypeとなります。従って、GroupTypeはTypeIDを有する。とにかく、それは私が "親"と解釈する方法です。

カテゴリーは、タイプレベルで

をcontrainedしなければならない私は、次の文与えられたことの意味を理解することができませんでした:

私はTypeCatに入力したデータがで有効であることを確認カテゴリとタイプのグループがGroupCatに存在すること

「その」カテゴリは何かわかりませんが、そのルールはと思われます

TypeCat.TypeID exists in GroupType.TypeID 
GroupType.GroupID exists in GroupCat.GroupID 

しかし、あなたはまた、私はグループ/カテゴリーレベルでデータを格納したい

言ったことがあったように、新たなデータが、左から来ている意味すると思われる

GroupCat.GroupID exists in GroupType.GroupID -- opposite above 
GroupCat.CatID exists in TypeCat.CatID 
{GroupCat.GroupID,TypeCat.TypeID} exists in GroupType 
GroupCatの新しい行は、一定の制約を満たさなければならないこと、および10これらのルールは です。はSQLで表現することができますが、私はそれをすべきかどうかはわかりません。そして私は彼らがあなたが意図しているものであるかどうかはわかりません。私はダーツを投げています。まったく目が見えない場合は、照明が望ましいものを残しているとしましょう。

一般に、SQLの文A must have a Bは、その型の値のドメインを表すテーブルBと、そのドメインから値を取得する必要があるAの列の外部キーを意味します。そのロジックでは、モデルにグループ、カテゴリ、タイプのテーブルが存在する必要があります。上記の最後のルールのパターン(2つのテーブルを結合して第3のドメインに合致するかどうかを判断する必要がある)は発生しますが、はめったにです。それが収穫されるとき、それは通常、物事を慎重に見て、モデルが実際に現実を反映するようにします。

関連する問題