お気づきかもしれませんが、簡単に説明すると、リレーショナル データベースの用語では、通常、関係は 1:1、1:M、または M:M と表現されます。それらがどのように機能するかには、根本的な違いがあります。1:1 の関係では、外部キーを 1 つのテーブルに別のテーブルにポストする必要があります。それはどちらのテーブルにもある可能性があります。1:M では、その 1 つを指す「多」テーブルに外部キーをポストする必要があります。AM:M では、新しいテーブルを作成する必要があります。リレーションシップ テーブルの各レコードには、各「メイン」テーブルへのポインターが 1 つずつあります。
たとえば、私たちの集合住宅にはスイートごとにちょうど 4 部屋があるとしたら、それは一般的な 1:M の関係ではなく、より具体的な 1:4 の関係であると言えます。ただし、データを RDB に格納する方法に関しては、1:M として格納します。各「ルーム レコード」には、「スイート レコード」へのポインタがあります。DB 構造に関する限り、1:M のままです。DB トリガーまたはコードに制約を追加して、数値が常に正確に 4 でなければならないことを強制できますが、これは DB 構造には影響しません。
このような制約が重要な ERD では、一部の DB 設計者は、DB エンティティに付けられた「多」記号の隣に数字を書きます。ちょうど 4 でなければならない場合は、「4」と書きます。
正確な数または最小値を強制するのは難しい場合があることに注意してください。実生活では、誰もがちょうど2人の親を持っていると言うのは1つのことです. これをデータベース設計の要件にするのは別の話です。つまり、両方の両親を同時に追加しない限り、「人物」レコードを追加することはできません。したがって、データ入力画面には、本人とその両親に関するすべてのデータのフィールドが必要です。または、親データの入力に取りかかるまで、何らかのダミー レコードを追加する必要があります。そして、この例では、両親が人物と同じレコード タイプである場合 (たとえば家系図データベースを作成している場合)、両親の両親を追加せずに両親を追加することはできず、両親の両親の両親を追加することはできません。 、そして...どこで止まりますか?私たちのことを言うための何らかの規定が必要です。
場合によっては、関連するレコードが特定の数だけでなく、それらが何らかの形で異なる場合、それぞれに個別のポインターを作成することがあります。たとえば、各人には 2 人の親がいる、つまり M=2 の 1:M の関係であると言う代わりに、各人には母親と父親がいる、つまり 2 つの 1:1 の関係であると言うことができます。個人的には、通常はクエリとインデックス作成がより困難になるため、これを行うことはめったにありません。parent_id を調べて両方の親を取得する代わりに、mother_id と Father_id の両方を調べる必要があります。一方にインデックスを付けたい場合は、おそらくもう一方にインデックスを付けたいと思うでしょう。数が 2 または 3 よりも多く、クエリで多くのポインター フィールドを調べる必要がある場合、たとえば、ポインター 1、2、3、5、および 6 をチェックするのに 4 を含めるのを忘れるなど、プログラマーがあなたを見逃すのは簡単です。 .
ところで、「部屋の数は所有者の子供の数と同じでなければならない」などの制約は注意が必要です。頭のてっぺんから作った例だと思いますが、特定の数値を設定するときに陥りやすい種類の罠です。あなたの家族では、それぞれの子供が自分の寝室を持っているかもしれませんが、多くの家族では、子供たちは部屋を共有しなければなりません. または逆に、多くの家族がゲスト用に予備の寝室を持っています。何年も前に医療保険のシステムに取り組んだことを思い出します。そこでは、家族ごとに子供を 8 人までという制限を設けていました。しかし、もちろん、8 人以上の子供を持つ家族もいます。