Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Констрейн FOREIGN KEY и индексы  [new]
Stok
Member

Откуда:
Сообщений: 44
Не бейте за ламерский вопрос.
Создал таблицу
CREATE TABLE [T_FreePara] (
	[Record_Id] [int] IDENTITY (1, 1) NOT NULL ,
	[mel_ID] [int] NOT NULL ,
	[Para] [int] NULL ,
	[Time_K] [datetime] NULL ,
	CONSTRAINT [PK_T_FreePara] PRIMARY KEY  CLUSTERED 
	([Record_Id])  ON [PRIMARY] ,
	CONSTRAINT [FK_T_FreePara_T_Mel] FOREIGN KEY 
	([mel_ID]) 
REFERENCES [T_Mel] ([mel_ID]))
Нужна по возможности быстрая реакция на запрос:
Select * From [T_FreePara] where [mel_ID] = @Value
Чисто конкретный вопрос:
1. Нужно ли создавать специально индекс по [mel_ID] или он уже неявно создан при реализации констрейна FOREIGN KEY ?
2. Если нужно, то тогда любопытно, а что, собственно, физически творит этот констрейн?
21 июл 04, 13:50    [823921]     Ответить | Цитировать Сообщить модератору
 Re: Констрейн FOREIGN KEY и индексы  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
этот констрейн творит по желанию проверку целостности, каскадное обновление\удаление.
а индекс создавать надо.

для спящего время бодрствования равносильно сну
21 июл 04, 13:53    [823939]     Ответить | Цитировать Сообщить модератору
 Re: Констрейн FOREIGN KEY и индексы  [new]
Stok
Member

Откуда:
Сообщений: 44
Стоппп!!!
Спящий
этот констрейн творит по желанию проверку целостности, каскадное обновление\удаление.
а индекс создавать надо

Сие он творит ПОСЛЕ ТОГО (вернее В РЕЗУЛЬТАТЕ некоторых предварительных организационных действий). Ты перечислил функции проверки целостности, но ведь они реализуются не на пустом месте.
Вряд ли RELATION - пустая декларация. Нужно (я фантазирую) для анализируемого поля, на которое цепляется вторичный ключ, создать некоторую специальную "табличку" , где бы перечислялись в отсортированном виде существующие значения поля и соответствующие им значения поля родительской таблицы. Иными словами, навести мосты, которые имеют вид некоторого неявного индекса. А иначе - замучаешься проверять целостность сканированием больших таблиц.
А если так, то индекс не нужен, поскольку он уже как бы создан.
Ну а если RELATION - все таки пустая декларация и, например, при каскадном удалении дочерняя таблица сканируется каждый раз от начала до конца? Тогда ты прав, Спящий.
21 июл 04, 15:35    [824493]     Ответить | Цитировать Сообщить модератору
 Re: Констрейн FOREIGN KEY и индексы  [new]
BugsBunny
Member

Откуда: GMT+5=EST
Сообщений: 2414
Алексей2003
этот констрейн творит по желанию проверку целостности, каскадное обновление\удаление.
а индекс создавать надо.

для спящего время бодрствования равносильно сну


To Stok:
BOL
FOREIGN KEY Constraints
A foreign key (FK) is a column or combination of columns used to establish and enforce a link between the data in two tables. A link is created between two tables by adding the column or columns that hold one table's primary key values to the other table. This column becomes a foreign key in the second table.

Remove PK/unique index from [mel_ID] column in [T_Mel] table and try to rerun your "CREATE TABLE" statement. Any luck?
WHat you're gonna do with your referencing column is your own business as long as referenced column is a primary key or has unique constaint/index.

PS.
автор
...я фантазирую...

I don't think it's a suitable for technical forums. "I've read in BOL..." is much better.
PPS.
автор
...Тогда ты прав, Спящий.

I would also recommend to use "Вы" instead of "ты" unless opposite was specified explicitly.
21 июл 04, 21:36    [825732]     Ответить | Цитировать Сообщить модератору
 Re: Констрейн FOREIGN KEY и индексы  [new]
Stok
Member

Откуда:
Сообщений: 44
Действительно, по полю дочерней таблицы сервер никаких индексов не строит, хоть это и не вполне логично, исходя из громкого определения ВТОРИЧНЫЙ КЛЮЧ.

Реплика для BugsBunny :
1. Я спрашивал о том, что делается сервером в отношении ВТОРИЧНОГО КЛЮЧА (т.е. поля дочерней таблицы). А о том, что создается ссылка к индексу первичного ключа родительской таблицы, это было ясно изначально.

2. Трудно найти более рыхлое и методически несовершенное произведение, чем БукОфЛайн. Простые вещи там расписаны до тошноты, а по критическим местам проходят скороговоркой. Поэтому "фантазии" тут вполне уместны и разрешаются коллективным разумом нашего форума.
Ваше почти религиозное чувство к BOL я могу только уважать.
(Вспомнил фразу из И.Уткина: "Он знал почти наизусть, почти весь талмуд").

3. Не зная в должной мере английского языка, попытался перевести Вашу последнюю фразу так:
"Я также рекомендовал бы использовать "You" вместо "You", если противное не было оговорено."
Оказался в затруднении. Нельзя ли российских форумах выражаться по-русски.
26 июл 04, 14:43    [835103]     Ответить | Цитировать Сообщить модератору
 Re: Констрейн FOREIGN KEY и индексы  [new]
Stok
Member

Откуда:
Сообщений: 44
Действительно, по полю дочерней таблицы сервер никаких индексов не строит, хоть это и не вполне логично, исходя из громкого определения ВТОРИЧНЫЙ КЛЮЧ.

Реплика для BugsBunny :
1. Я спрашивал о том, что делается сервером в отношении ВТОРИЧНОГО КЛЮЧА (т.е. поля дочерней таблицы). А о том, что создается ссылка к индексу первичного ключа родительской таблицы, это было ясно изначально.

2. Трудно найти более рыхлое и методически несовершенное произведение, чем БукОфЛайн. Простые вещи там расписаны до тошноты, а по критическим местам проходят скороговоркой. Поэтому "фантазии" тут вполне уместны и разрешаются коллективным разумом нашего форума.
Ваше почти религиозное чувство к BOL я могу только уважать.
(Вспомнил фразу из И.Уткина: "Он знал почти наизусть, почти весь талмуд").

3. Не зная в должной мере английского языка, попытался перевести Вашу последнюю фразу так:
"Я также рекомендовал бы использовать "You" вместо "You", если противное не было оговорено."
Оказался в затруднении. Нельзя ли российских форумах выражаться по-русски.
26 июл 04, 14:45    [835112]     Ответить | Цитировать Сообщить модератору
 Re: Констрейн FOREIGN KEY и индексы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Действительно, по полю дочерней таблицы сервер никаких индексов не строит, хоть это и не вполне логично, исходя из громкого определения ВТОРИЧНЫЙ КЛЮЧ.

Вторичный(альтернативный) ключ это вовсе не тоже самое что и ВНЕШНИЙ ключ.

Трудно найти более рыхлое и методически несовершенное произведение, чем БукОфЛайн.
Да ну. И чего же вы там не нашли ? Описания того что "FOREIGN KEY" не создает по-умолчанию индекса? Но BOL рекомендует создать такой индекс для больших таблиц с перечислением почему надо так делать ?

А вот почему это не нужно делать для малых таблиц также можно понять именно из BOL. Если внимательно изучить описание физической организации таблиц и индексов.
26 июл 04, 15:02    [835171]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить