1

次の表があります(簡略化):

create table dbo.Users
(
  User_Id int identity not null 
    constraint PK_Users_Id primary key clustered (Id),  
); 

create table dbo.UsersSeals
(
  UserId int not null, 
  SealId int not null,
    constraint PK_UsersSeals_UserId_SealId primary key clustered (UserId, SealId)
);

create table dbo.Seals
(
  Seal_Id int identity not null 
    constraint PK_Seals_Id primary key clustered (Id),  
);

alter table dbo.UsersSeals
add constraint FK_UsersSeals_UserId foreign key (UserId) references Users(Id) on delete cascade on update cascade,
    constraint FK_UsersSeals_SealId foreign key (SealId) references Seals(Id) on delete cascade on update cascade;

したがって、ユーザーとシールの間に多対多の関係があります。1 人のユーザーが複数のシールを持つことができ、シール上に複数のユーザーを持つことができます。1 人のユーザーが多くのシールを持つことができるが、1 つのシールには 1 人のユーザーしか持たない 1 対多が必要です。

はい、UsersSeals テーブルを削除して、UserId を Seals テーブルに追加できます。ただし、他のテーブルでも同じようにシールを使用しています。

ユーザー テーブルや他のテーブルとの 1 対多の関係を持つ Seals テーブルが 1 つだけ必要です。

これはできますか?

4

1 に答える 1

2

列のテーブルに個別の一意の制約を追加しますUsersSealsSealID

次に、このテーブルが で一意であることを保証しますSealID。つまり、1 つのシールは 1 人のユーザーにのみ関連付けることができますが、ユーザーは多くのシールを持つことができます。

于 2013-03-16T15:59:28.243 に答える