2016-02-23 2 views
1

Я наткнулся на это T-SQL коды в базе данных клиента сегодня:столбца первичного ключа с внешним ключом ссылкой на себя

CREATE TABLE dbo.Dates 
(
    MarketDate date, 
    PRIMARY KEY (MarketDate), 
    FOREIGN KEY (MarketDate) REFERENCES dbo.Dates (MarketDate) 
) 

Неясно мне, что цель может быть подано, позволяя столбец первичного ключа в имеют отношение внешнего ключа к себе. Естественно, я удалил отношения.

Будет ли этот внешний ключ иметь какой-либо эффект? Есть ли когда-нибудь прецедент, который бы оправдывал его использование? Если нет, то почему SQL Server допускает такие отношения.

+0

Эта таблица не похожа на обычное хранилище учетных записей, это скорее постоянный _calendar_ для целей программирования. Сначала я попрошу разработчика. Это может быть трюк, описанный @ S.Karras, чтобы избежать редактирования, но для меня это кажется неприемлемым. –

+0

Если вы узнаете, можете ли вы обновить свой ответ, пожалуйста? Это интересно, и я очень хочу узнать причину разработчиков. Ура! –

+0

@DaveBrown: в дополнение к TRUNCATE, DELETE и UPDATE также разрешены (по крайней мере, на SQL 2012). Согласен - интересный вопрос. – DMason

ответ

0

Единственная причина, по которой я могу представить, заключается в том, что создатель таблицы хотел запретить использование инструкций TRUNCATE TABLE в таблице Dates.

+0

Я задавался вопросом, но я только что создал его, и он позволяет Truncate Table с 1, 10 и 100 записями в нем. Признаюсь, я удивлен, что двигатель достаточно продвинутый, чтобы знать, что таблица обрезания в порядке. Weird. –

Смежные вопросы