Страница: 1 |
|
Вопрос: MS SQL Server 2000 & Foreign key
|
Добавлено: 26.02.04 10:31
|
|
Автор вопроса: Иной
|
Доброе время суток, уважаемые. Начинаю с самого начала. Вопрос намбер ван: Кто-нибудь может мне объяснить как создать внешний ключ в таблице?
Ответить
|
Номер ответа: 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 )
| |
Ответить
|
Страница: 1 |
Поиск по форуму