什么是创建表的SQL,其PK也是FK?

时间:2010-01-28 05:15:15

标签: sql sql-server

说我有:

create table Post(
  PostID int not null constraint PK_Post primary key clustered,
  Title nvarchar(200) not null
) on [primary]

create table PostDetail(
  PostID int not null constraint PK_PostDetail primary key clustered,
  Text nvarchar(max) null
) on [primary]

如何使PostDetail.PostID成为引用Post.PostID的FK?

4 个答案:

答案 0 :(得分:2)

使用:

ALTER TABLE POSTDETAIL
  ADD CONSTRAINT fk_post 
      FOREIGN KEY (postid) REFERENCES POST (postid)

虽然我必须说你列出的内容看起来是一对一的关系 - 但只有一个POSTDETAIL记录与POST记录相关联。你不妨使用:

create table Post(
  PostID int not null constraint PK_Post primary key clustered,
  Title nvarchar(200) not null,
  Text nvarchar(max) null
) on [primary]

答案 1 :(得分:2)

如果你想建立一个正确的1-1关系,那就更难了。目前,您仍然可以在[Post]中找到[PostDetail]中没有条目的条目。

如果你想更进一步,你可能想要研究Tony Rogerson最近对这个问题的调查,http://sqlblogcasts.com/blogs/tonyrogerson/archive/2010/01/23/how-to-create-a-one-to-one-relationship-in-sql-server-using-dri-triggers-and-views.aspx

答案 2 :(得分:1)

事后:

alter table PostDetail
    add constraint FK_PostDetail_Post 
        foreign key (PostID) references Post (PostID)

或表def:

create table PostDetail(
  PostID int not null constraint PK_PostDetail primary key clustered,
  Text nvarchar(max) null,
  constraint FK_PostDetail_Post foreign key (PostID) references Post (PostID)
) on [primary]

答案 3 :(得分:1)

使用以下字段创建新表。

标题ID(PK,FK - 标题表) Publisher_ID(PK,FK - Pub表) 有效 - 位 状态(无限制)