データベース設計でn:mおよび1:nはどういう意味ですか?
キーや関係に何か関係がありますか?
m:n
は多対多の関係を示すために使用されます(反対側のm
オブジェクトは反対側のn
に関連します)1:n
は1対多の関係(1
反対側のn
に関連する反対側のオブジェクト)。
1:nは「1対多」を意味します。 2つのテーブルがあり、テーブルAの各行はテーブルBの任意の数の行で参照できますが、テーブルBの各行はテーブルAの1行のみを参照できます(またはまったく参照できません)。
n:m(またはn:n)は「多対多」を意味します。テーブルAの各行はテーブルBの多くの行を参照でき、テーブルBの各行はテーブルAの多くの行を参照できます。
通常、1:n関係は、単純な外部キーを使用してモデル化されます。テーブルAの1つの列は、テーブルBの同様の列、通常は主キーを参照します。主キーは1行のみを一意に識別するため、この行はテーブルAの多くの行で参照できますが、テーブルAの各行はテーブルBの1行のみを参照できます。
N:m関係は、この方法では実行できません。一般的な解決策は、リンクする各テーブルに1つずつ、2つの外部キー列を含むリンクテーブルを使用することです。テーブルAとテーブルBの間の参照ごとに、対応する行のIDを含む1つの行がリンクテーブルに挿入されます。
n:m-> nとmの両方がわからない場合、単に多対多であり、2つの他のテーブル間のブリッジテーブルで表されます。
-- This table will hold our phone calls.
CREATE TABLE dbo.PhoneCalls
(
ID INT IDENTITY(1, 1) NOT NULL,
CallTime DATETIME NOT NULL DEFAULT GETDATE(),
CallerPhoneNumber CHAR(10) NOT NULL
)
-- This table will hold our "tickets" (or cases).
CREATE TABLE dbo.Tickets
(
ID INT IDENTITY(1, 1) NOT NULL,
CreatedTime DATETIME NOT NULL DEFAULT GETDATE(),
Subject VARCHAR(250) NOT NULL,
Notes VARCHAR(8000) NOT NULL,
Completed BIT NOT NULL DEFAULT 0
)
これは、2つのテーブル間のマッピングを実装するためのブリッジテーブルです
CREATE TABLE dbo.PhoneCalls_Tickets
(
PhoneCallID INT NOT NULL,
TicketID INT NOT NULL
)
1対多(1:n)は、主キーとして列を持つ単純な1つのテーブルと、外部キー関係としてこの列を持つ別のテーブルです。
1つの製品カテゴリに多数の製品を含めることができる、類似の製品および製品カテゴリの種類
例で2つの概念を説明するために、書店の注文入力システムがあるとします。注文のアイテムへのマッピングは多対多(n:m)です。これは、各注文に複数のアイテムを含めることができ、各アイテムを複数の注文で注文できるためです。一方、顧客と注文間のルックアップは1対多(1:n)です。これは、顧客が複数の注文を出すことができるが、注文が複数の顧客に対するものではないためです。
リレーショナルデータベースでは、すべてのタイプの関係が同じ方法で、つまり関係として表されます。各関係の候補キー(および場合によっては他の制約も)は、どのような関係が表されるかを決定します。 1:nとm:nは2種類のバイナリ関係です。
C {Employee*,Company}
B {Book*,Author*}
いずれの場合も、*はキー属性を示します。 {Book、Author}は複合キーです。
Cは、各従業員がone会社のみで働く関係ですが、各会社は多従業員(1:n)を持つことができます:Bは本が持つことができる関係です- 多く著者と著者は書くことができます多く本(m:n):
主要な制約により、各従業員は1つの会社にのみ関連付けられ、書籍と著者の任意の組み合わせが許可されることに注意してください。
他の種類の関係も同様に可能です:n-ary(3つ以上のコンポーネントを持っています);固定カーディナリティ(m:nここで、mおよびnは固定定数または範囲です);指向性;等々。ウィリアム・ケントの著書「Data and Reality」では、少なくとも432種類が特定されています。これは、単なるバイナリ関係のためのものです。実際には、1:nとm:nのバイナリ関係は非常に一般的であり、通常、データモデルの設計と理解において特に重要なものとして選ばれます。
多対多(n:m)1対多(1:n)
m:nは多対多の関係を指します。1:nは、たとえばemployee(id、name、skillset)skillet(id、skillname、qualifications)の1対多の関係を意味します
この場合、1人の従業員は多くのスキルを持ち、他のケースは無視できます。1:N関係と言えます