1

私はデータベースを始めたばかりなので、私の質問は少し不正確に表現されるかもしれませんが、最善を尽くします...私の大学では、Oracle Data Modelerを使用してデータベースをモデル化しています。質問: あるエンティティのプライマリ UID が外部キーとして別のエンティティに渡されるのはいつですか? 私が発見したことから (実験的に、ググることができなかったので...)、2 つのエンティティは 1:1 でバインドされているときに PK を交換しますが、他のタイプのバインディングはどうですか? どちら側がオプションとマークされているキーパッシングにとって重要ですか?

4

1 に答える 1

0

さまざまなタイプの関係とそのマッピングについて学習する必要があります。

私が持っているわずかな知識から、3 種類の関係を以下に示します。

  1. 1対1

    これは、テーブルの 1 行が他のテーブルの 0 行または 1 行に関連付けられている関係です。理想的には、この関係を 2 つの異なるテーブルに実装しないでください。テーブルは 1 つだけで十分です。例 -personpermanent_address テーブルがあるとします。ビジネス ルールに従って、個人の恒久的な住所は 1 つしか存在できないと想定しています。したがって、次のことができます。

    person(personid, firstname, lastname, ...)
    permanent_address (permanent_addressid, personid, line1, line2, ...)
    

    ここで、personidin table は tableの列をpermanent_address指します。personidperson

    外部キーを必須にしたい場合はNOT NULL、列に制約を追加できます。

  2. 多対一

    これは、1 つのテーブルの多くの行が他のテーブルの 1 つの行に関連付けられている、より一般的で広く使用されている関係です。

    たとえば、1 人の人物が複数の車を所有できるというビジネス ルールがある場合、次のようになります。

    person(person_id, first_name, last_name, birthdate, ...)
    car (licence_plate_number, person_id, carname, ...)
    

    ここで、 in table はperson_idin cartable を指します。person_idperson

  3. 多対多

    これは、1 つのテーブルの多くの行が、他のテーブルのゼロ、1 つ、または複数の行に関連付けられる一種の関係です。

    たとえば、一人の人が多くの趣味を持つことができます。一つの趣味は多くの人が共有できます。したがって、この関係を次のように実装できます。

    person (person_id, first_name, last_name, birthdate, ....)
    hobby (hobby_id, hobby_name, hobby_type, ...)
    person_hobby (person_id, hobby_id)
    

    ここでperson_id、in person_hobbytable はperson_idof persontable を参照し、 hobby_idin table はof tableperson_hobbyを参照します。この中間テーブルは、この多対多の関係を実装するために必要です。同じ人に同じ趣味を複数回割り当てることを避けるために、複合主キーとして列セット (person_id、hobby_id) に制約を適用できます。hobby_idhobbyPRIMARY KEY

于 2013-04-11T18:12:29.500 に答える