3

それで、私はここでスタックオーバーフローに関する多くの回答を読みましたが、その概念全体についてはまだ混乱しています。具体的には、この記事 (参照されているすべての記事を含む) を読みましたが、概念をしっかりと把握していないようです (または、カーディナリティ (n:m など) と ID を混同している可能性があります)。 ):

識別関係と非識別関係についてまだ混乱している

私の問題は次のとおりです。識別関係は、子エンティティの主キーにその外部キーを含める必要があることを意味し、非識別関係にはその逆が当てはまることを知っています (これは正しいですか?)。さて、これは私には少し「前向き」すぎるように思えますか? リンクの1つのコメントの1つでも同じことが言われました。どうすれば「一歩下がって」、どの関係がどのアイデンティティーのものであるかを実際に確認できますか?

たとえば、次の 2 つのジレンマがあります。

  1. job_title(親、1) からemployee(子、1..*)。job_title はルックアップ テーブルであるため、非識別関係である必要があると考えるのは正しいですか? それとも、「従業員は job_title なしでは存在できないため、識別しなければならない」と言う方が正確でしょうか? それとも、そのシナリオを定義する関係でしょうか?
  2. employeeto employee_equipment(m:n カーディナリティ間のブリッジ エンティティ) to equipment. さて、これは employee_equipment の両側で識別関係でなければならないことを読みました。しかし、従業員が機器を必要としない場合はどうなるでしょうか? オプションの識別関係を持つことはできますか?

主キー/外部キー、またはその問題について本当に技術的なことを考えずに、どの ID テーブルが属すべきかを特定する方法を本当に探していると思います。

どんな助けでも大歓迎です!

4

2 に答える 2

5

あなたはオプション性とアイデンティティの間のつながりを考えすぎています。すべてがより自然にあなたにもたらされるまで、それらは完全に無関係であると考えるのが最善です。

オプション性については、オプション性が方向性を持っていることを覚えておくことが重要です。例を使用するにはemployee_equipment:確かに、従業員は機器を必要としません。employeeからへの1対多の関係employee_equipmentはオプションです。同時に、反対の視点から見ると、関係は必須です。関連付けるレコードがemployee_equipmentない限り、レコードを含めることはできません。employee

アイデンティティは、偶然にも子から親への識別関係が必須であることを除いて、オプション性とは何の関係もありません。親から子への義務でもあるかどうかは、アイデンティティに関する限り、ここにもそこにもありません。

関係を特定するのは、あなたが話している子供を知るために、あなたが話している親(および他のいくつかのこと)を知る必要があるということです。つまり、子の主キーには、親への外部キーが含まれている必要があります。

純粋な交差テーブル(例employee_equipment)は、この良い例です。純粋な交差の主キーは、両方の親テーブルへの外部キーの組み合わせです。これらの種類のテーブルに代理キーを追加する人もいることに注意してください。複数の候補キーがある場合、IDの観点からはそれほど重要ではありません。IDを決定する上で重要なのは、外部キーが候補キーの一部であるかどうか、その候補キーがたまたま主キーであるかどうかです。

もう1つの良い例は、データベースのメタデータカタログのようなものです。このカタログでは、テーブルが属するスキーマによって識別されるのと同じように、列が属するテーブルによって識別されます。列が呼び出されていることを知っていても、NAMEそれがどの列であるかはわかりません。NAMEそれがテーブルの列であることを知っているとCUSTOMER役立ちます。(どのスキーマが含まれているかなども知る必要がありますCUSTOMER)。

于 2013-03-16T00:40:34.277 に答える
3

ジョエルは良い答えを提供してくれました(彼に+1)。関係を特定することを考えるときに使用できる小さな精神的な近道を提供させてください...ただ自問してください:

子エンティティの属性のみで一意性を実現できますか?

「いいえ」の場合、親から移行された属性を子キーに含めて一意にする必要がある場合は、識別関係1があります。それは、存在依存ではなく、識別依存についてです2 !

このトピックに関するその他の考察については、この投稿に興味があるかもしれません。


1そして、子エンティティは「弱い」または「従属」です。

2識別依存は通常、存在依存を意味しますが。

于 2013-03-16T11:35:48.737 に答える