将多对多关系转换为一对多关系

时间:2013-03-16 15:50:41

标签: sql database-design

我有以下表格(简化):

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;

所以我在用户和密封之间有很多关系。一个用户可以有许多密封件,并且在密封件上可以有许多用户。我需要一个一个到多个,其中一个用户可以有很多印章,但印章只有一个用户。

是的,我可以删除UsersSeals表并将UserId添加到Seals表中。但是,我和其他桌子一样使用海豹。

我想只有一个Seals表与Users表和其他表一对多关系。

可以这样做吗?

1 个答案:

答案 0 :(得分:2)

UsersSeals列的SealID表格中添加单独的unique constraint

然后您保证此表在SealID上是唯一的,这意味着一个印章只能与一个用户关联,但用户可以有很多印章。