2009-09-04 75 views
1

我有两个表:SQL服务器 - 菜鸟关系问题

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) 

我希望能够创建多个“注释”,所有链接回ClientJob台基于“IntRef”字段。所以基本上每次发表评论时,都会指定ClientJob的INTREF,然后当我从ClientJob表中撤回所有的详细信息时,所有评论都会随之发布。我试图设置两个表之间的关系,但是SQL Server声明主键不是ClientJob表中的IntRef字段,因此我无法将注释表链接到它。有没有一种方法可以在ClientJob表中拥有多个主键?或者另一种更有效的方式来完成这一点。关系是“1 ClientJob有很多评论”。

帮助非常感谢,

亲切的问候。

回答

2

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

假设你的参考是“一个ClientJob可以有多种意见,但每个评论仅供曾经属于一个ClientJob”,那么这两个步骤,将为你创造必要位:

1)把唯一索引在 “INTREF” 在您的 “ClientJob” 表:

CREATE UNIQUE INDEX UIX_IntRef 
    ON dbo.ClientJob(IntRef) 

2)把从评论的外键关系ClientJob:

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

钍在应该做到这一点!

Marc

+0

所以我不需要像“Atilla Ozgur”这样的连接表?! – Goober 2009-09-04 09:50:53

+0

不,这两个步骤(在ClientJob.IntRef上创建唯一索引并将FK关系添加到评论表)将做 – 2009-09-04 09:53:07

+0

是的,谢谢! :-D – Goober 2009-09-04 10:03:02

0

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