たとえば、役割のテーブルがあるとします。
Roles
-----
ID Name
0 Salesman
1 Client
2 Manager
また、これらの役割が相互に排他的ではないと仮定しましょう。つまり、人は同時にセールスマン、クライアント、およびマネージャーになることができます。
フィールドのあるPerson
テーブルがある場合、テーブル内の複数の行を参照するにはどうすればよいですか?Role
Roles
たとえば、役割のテーブルがあるとします。
Roles
-----
ID Name
0 Salesman
1 Client
2 Manager
また、これらの役割が相互に排他的ではないと仮定しましょう。つまり、人は同時にセールスマン、クライアント、およびマネージャーになることができます。
フィールドのあるPerson
テーブルがある場合、テーブル内の複数の行を参照するにはどうすればよいですか?Role
Roles
元のテーブルの両方を参照する新しいテーブルを導入します。
CREATE TABLE PersonRoles (
PersonID int not null,
RoleID int not null,
constraint PK_PersonRoles PRIMARY KEY (PersonID,RoleID),
constraint FK_PersonRoles_Persons FOREIGN KEY (PersonID) references Person (ID),
constraint FK_PersonRoles_Roles FOREIGN KEY (RoleID) references Role (ID)
)
多重度がであると仮定するとm:n
、上記は正しいです。私は(あなたの質問には記載されていませんが)複数の人が例えばセールスマンになることができると仮定しました。
これを機能させるには、「nm関係」を作成する必要があります。追加のテーブルが必要です。「person_role」と呼ばれ、他の両方のテーブルへの外部キーが含まれています。
人<===>PersonRole<===>役割
したがって、3つのテーブルがあります。
Person
------------
ID
Name
etc.
Role
---------
ID
Name
PersonRole
------------
PersonID
RoleID
また、重複を避けるために、PersonIDとRoleIDを一意の複合キーにする必要があります
/カルステン
(少なくとも)2つの列を持つ別のテーブルを作成する必要があります。
PersonId, RoleId
したがって、挿入できます(例)
1, 0
1, 2
2, 1
id = 1の人はセールスマンとマネージャーになり、id=2の人はクライアントになります。