Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: MS SQL Server 2000 & Foreign key Добавлено: 26.02.04 10:31  

Автор вопроса:  Иной

Доброе время суток, уважаемые.

Начинаю с самого начала.

Вопрос намбер ван:

Кто-нибудь может мне объяснить как создать внешний ключ в таблице?

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 POMAH



ICQ: 223-574-928 

Вопросов: 0
Ответов: 16
 Профиль | | #1 Добавлено: 26.02.04 15:02

В базах данных Jet есть поле счетчика. В SQL Server есть аналогичная концепция - уникальный столбец. Он должен задаваться на этапе построения таблицы, т.к. SQL Server может позднее создать поля, содержащие нулевые значения, а поля, не содержащие нулевых значений, могут быть созданы только во время построения таблицы. Так  надо задать для каждой таблицы.

create table tblCustomer

{ID  int identity,

  constraint tblCustomer_IDPK primery key (ID)

} создали поле ID как уникальный столбец, а затем это поле стало первичным ключом

Теперь другая таблица:

create table tblOrder

{ ID   int identity

  constraint tblOrder_IDPK primary key (ID),

   CustomerID  int    not null

}

Теперь устанавливаем ограничение ссылочной целостности между таблицами

alter table tblOrder add

   constraint tblOrder_cid_fk

   foreign key (CustomerID)

    references tblCustomer (ID)

Вот примерно так

Ответить

Номер ответа: 2
Автор ответа:
 Иной



Вопросов: 19
Ответов: 50
 Профиль | | #2 Добавлено: 26.02.04 16:21
Ок. Полностью согласен. Смотрим дальше.
Есть вот такое безобразие:

create table A
(
pole_1 int,
pole_2 varchar(15) primary key,
pole_3 int
)

create table B
(
pole_4 datetime,
pole_5 smalldatetime,
pole_2 varchar(15),
pole_3 int
constraint pk_B primary key (pole_4,pole_5,pole_2)
)

Обратите внимание, что в таблицах имеются одинаковые поля "pole_2" и
"pole_3". По ним нужно организовать связку (relationship). Причем,
таблица "В" зависимая.
Говорим:

alter table B add constraint fk_AB
foreign key
(
pole_2,
pole_3
)
references A
(
pole_2,
pole_3
)

Получаем:

Server: Msg 1776, Level 16, State 1, Line 1
There are no primary or candidate keys in the referenced table 'A'
that match the referencing column list in the foreign key 'fk_AB'.

Понятно, что если в таблице А pole_3 включить в примари кей или
сделать уникальным, то все будет тип-топ, но как быть, если это поле
нельзя включать в примари кей и оно не должно быть уникальным, а
создать связь нужно?

Ответить

Номер ответа: 3
Автор ответа:
 ol2003



Вопросов: 3
Ответов: 122
 Профиль | | #3 Добавлено: 27.02.04 04:43

Увы, мон шер ами, определение Foreign Key строго привязывает внешний ключ к Primary Key или Unique constraint. Так что нижеприведенная работает:

create table A
(
pole_1 int,
pole_2 varchar(15) primary key,
pole_3 int
constraint uniqum_A unique (pole_2,pole_3)
)

create table B
(
pole_4 datetime,
pole_5 smalldatetime,
pole_2 varchar(15),
pole_3 int
constraint pk_B primary key (pole_4,pole_5,pole_2)
)


alter table B add constraint fk_AB
foreign key
(
pole_2,
pole_3
)
references A
(
pole_2,
pole_3
)

Ответить

Номер ответа: 4
Автор ответа:
 Иной



Вопросов: 19
Ответов: 50
 Профиль | | #4 Добавлено: 27.02.04 09:59
Нда.
Значит, если у меня поле не должно быть первичным ключом и не должно
быть уникальным, то к нему не привязаться?
Обидно, а так красиво было бы.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам