2016-07-30 37 views
1

デザイン循環参照

enter image description here

だから私は、募集のシナリオのためのデータベースを設計する必要があります。

  • 申請:7つのテーブルはで構成されてあり、申請データの
  • ポジション:スキルデータの
  • 申請スキル:応募者のスキルのリスト
  • ポジションスキル位置データ
  • スキルのために:ポジションに必要なスキルの一覧
  • 空室:空室のリスト
  • アプリケーション:アプリケーションデータのリスト

私のデザインには循環参照があると言われました。私はいくつかのデザイン例を探しましたが、私の場合には適切ではありませんでした。すべてのテーブルが必要であり、削除することはできません。私は他のアイデアを考え出すことはできません。

どのように循環参照を削除できますか?ありがとうございました。

+0

1.コメントでは、「JobtitleテーブルはPositionテーブルのみを参照しています」と言っています。アプリケーションもですか?すべての参照テーブルを含めてください。 2. Position JobtitleIDもApplicationに表示する必要がありますか?もしそうなら、あなたはFKを外しました。アプリケーションJobtitleIDもPositionに表示される必要がありますか?もしそうなら、あなたはFKを外しました。そのようなFKは循環性に影響を及ぼす。 – philipxy

答えて

0

ここでは何も循環しませんが、唯一明らかな問題は代替キーを強制しないことです。図では通常AKとマークされています。UNIQUE NOT NULLを使用してください。

ここには、3つのテーブルの候補キーがあります。

ApplicantSkill {APPLICANT_ID, SKILL_ID, APPLICANT_SKILL_ID} 
      KEY {APPLICANT_ID, SKILL_ID} 
      KEY {APPLICANT_SKILL_ID} 

PositionSkill {POSITION_ID, SKILL_ID, POSITION_SKILL_ID} 
      KEY {POSITION_ID, SKILL_ID} 
      KEY {POSITION_SKILL_ID} 

Application {APPLICANT_ID, VACANCY_ID, APPLICATION_ID} 
     KEY {APPLICANT_ID, VACANCY_ID} 
     KEY {APPLICATION_ID} 

あなたは代理キー(追加_ID)を導入し、これらのテーブルのプライマリとしてそれらを選択し、 が、他(AK)は省略しているしている - エラーに非常になりやすい、重複、冗長性 と矛盾を簡単に作成できます。

そしてJOB_TITLE_IDApplicationから削除する必要があること、それが依存{POSITION_ID} --> {JOB_TITLE_ID}がある ようなので、それが同期して移動して、矛盾を作成することも見えます。

+0

こんにちは、これを指摘してくれてありがとう!私はそれらを修正:) – arukasa

0

ここに示したように、ではなく、に循環参照があります。

  • 申請者、スキル、および位置には参照がありません。
  • 申請者のスキル、ポジションスキル、および空席情報は、上記のもののみを参照してください。
  • アプリケーションは上記のみを参照します。
  • とそれだけです。

あなたは何も修正する必要がありません。

(注:関連テーブルがダイアグラムに表示されていないので、私は「Jobtitle ID」の事を無視しています。しかし、それは、そのテーブルのように思われないことは、とにかく、これらのいずれかに依存するであろう。)

+0

はい、JobtitleテーブルはPositionテーブルのみを参照します。 JOINを使用してクエリを実行すると、デザインによってデータの矛盾または冗長性が生じますか? – arukasa

+0

待ってください - JobtitleテーブルがPositionテーブルを参照していますか?その場合、PositionテーブルがJobtitleテーブルを参照するため、* do *には循環依存があります。なぜ別のテーブルがあるのですか? – ruakh

+0

私の間違いはすみません。私はポジションテーブルがJobtitleを参照していることを意味します。したがって、PositionテーブルのFK jobtitle idはJobtitleテーブルのjobtitle idを参照しています。私は混乱しています。誰かがこのデザインが冗長性を作成し、JOINを照会するときにパフォーマンスを低下させると言われたからです。それはすべてのテーブルが終わりで接続されているからです。 – arukasa

0

あなたは何を心配していますか?あなたの上にスキルのテーブルがあり、それは失われていません。