1

たとえば、役割のテーブルがあるとします。

Roles
-----
ID  Name
0   Salesman
1   Client
2   Manager

また、これらの役割が相互に排他的ではないと仮定しましょう。つまり、人は同時にセールスマン、クライアント、およびマネージャーになることができます。

フィールドのあるPersonテーブルがある場合、テーブル内の複数の行を参照するにはどうすればよいですか?RoleRoles

4

3 に答える 3

7

元のテーブルの両方を参照する新しいテーブルを導入します。

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、上記は正しいです。私は(あなたの質問には記載されていませんが)複数の人が例えばセールスマンになることができると仮定しました。

于 2012-05-29T07:02:51.580 に答える
1

これを機能させるには、「nm関係」を作成する必要があります。追加のテーブルが必要です。「person_role」と呼ばれ、他の両方のテーブルへの外部キーが含まれています。

人<===>PersonRole<===>役割

したがって、3つのテーブルがあります。

Person
------------
ID
Name
etc.

Role
---------
ID
Name

PersonRole
------------
PersonID
RoleID

また、重複を避けるために、PersonIDとRoleIDを一意の複合キーにする必要があります

/カルステン

于 2012-05-29T07:06:28.210 に答える
1

(少なくとも)2つの列を持つ別のテーブルを作成する必要があります。

PersonId, RoleId

したがって、挿入できます(例)

1, 0
1, 2
2, 1

id = 1の人はセールスマンとマネージャーになり、id=2の人はクライアントになります。

于 2012-05-29T07:02:53.367 に答える