SQL中的复合PK

时间:2012-12-10 10:49:34

标签: sql sql-server primary-key

我有以下内容:

create table dbo.Packs
(
  Id int identity not null
    constraint Packs_Id_PK primary key clustered (Id)
);

create table dbo.Files
(
  Id int not null  
  Data varbinary (max) filestream null
    constraint Files_Data_DF default (0x),  
  [Key] uniqueidentifier rowguidcol not null
    constraint Files_Key_U unique,      
  Mime nvarchar (200) not null,
    constraint Id_Mime_PK primary key clustered (Id, Mime)
) filestream_on [STORAGE];

alter table dbo.Files
add constraint Files_Id_FK foreign key (Id) references dbo.Packs(Id) on delete cascade on update cascade;

我正在寻找桌子分裂。所以:

  • 文件ID与包ID相同。
  • 一个包可以有一个或多个文件。每个文件都有不同的哑剧。
  • 文件中的PK将根据其ID和MIME创建。所以这是独特的。

基本上,pack可以包含以下行:

PACKS
标识
1
2个

文件如下:

FILES
标识哑剧
1图像/ jpg PK =(1,图像/ jpg)(PACK ID = 1)
1 image / gif PK =(1,image / gif)(PACK ID = 1)
2 image / jpg PK =(2,image / jpg)(PACK ID = 2)

文件ID与其关联的包ID相同。

谢谢你, 米格尔

1 个答案:

答案 0 :(得分:0)

如果每个文件对于" Mime"具有不同的值,那么" Mime"应该声明为UNIQUE。如果" Mime"是唯一的,然后集合{Id,Mime}也是唯一的。