SQL Server - Noob关系问题

时间:2009-09-04 09:33:40

标签: sql sql-server primary-key composite-primary-key

我有两张桌子:

CREATE TABLE InmarsatZenith.dbo.ClientJob
(JobRef int PRIMARY KEY NOT NULL,
IntRef uniqueidentifier,
CopyDeadline datetime,
PublicationDate datetime,
Repeat bit,
BusinessType nvarchar(25),
Sector nvarchar(30),
Lang nvarchar(15),
Format nvarchar(25),
CreativeRotation nvarchar(50),
TipinType nvarchar(25))

CREATE TABLE InmarsatZenith.dbo.Comment
(ID int identity PRIMARY KEY NOT NULL,
IntRef uniqueidentifier,
CreatedDate datetime,
ModifiedDate datetime,
CreatedBy nvarchar(25),
ModifiedBy nvarchar(25),
Comment text)

我希望能够创建多个“注释”,这些“注释”都基于“IntRef”字段链接回ClientJob表。因此,基本上每次发表评论时,都会指定ClientJob的INTREF,然后当我从ClientJob表中提取所有详细信息时,所有评论都随附。我已经尝试在两个表之间建立关系,但SQL Server声明主键不是ClientJob表中的IntRef字段,因此我无法将Comments表链接到它。有没有办法在ClientJob表中有多个主键?!或者另一种更有效的方法。关系是“1 ClientJob有很多评论”。

非常感谢,

亲切的问候。

2 个答案:

答案 0 :(得分:2)

您只能在任何表上拥有一个主键。但您也可以与唯一索引建立外键关系。

假设您的引用是“一个ClientJob可以有多个注释,但每个注释只属于一个ClientJob”,那么这两个步骤将为您创建必要的位:

1)在“ClientJob”表中的“IntRef”上放置一个唯一索引:

CREATE UNIQUE INDEX UIX_IntRef 
   ON dbo.ClientJob(IntRef)

2)将一个外键关系从Comments添加到ClientJob:

ALTER TABLE dbo.Comments
  ADD CONSTRAINT FK_Comment_ClientJob
  FOREIGN KEY (IntRef)  REFERENCES dbo.ClientJob(IntRef)

应该这样做!

马克

答案 1 :(得分:0)

对于外键,您需要Primay Key或唯一索引。在InmarsatZenith.dbo.ClientJob表中为IntRef添加唯一索引