Что такое SQL для создания таблицы, где его PK также является FK? - PullRequest
1 голос
/ 28 января 2010

Скажи, что у меня есть:

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 FK, ссылающимся на Post.PostID?

Ответы [ 4 ]

2 голосов
/ 28 января 2010

Использование:

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]
2 голосов
/ 28 января 2010

Если вы хотите сделать правильные отношения 1-1, это сложнее. В настоящее время у вас все еще может быть запись в [Post], у которой нет записи в [PostDetail].

Если вы хотите пойти еще дальше, вы можете исследовать недавние исследования Тони Роджерсона по этой проблеме, по адресу 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

1 голос
/ 05 июня 2012

Создайте новую таблицу со следующими полями.

ID заголовка (PK, FK - Таблица заголовков) Publisher_ID (PK, FK - Pub table) Действительный - бит Статус (без ограничений)

1 голос
/ 28 января 2010

По факту:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...