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

Откуда:
Сообщений: 272
Подскажите пожалуйста, что делать в такой ситуации
Создаю таблицы

Create table Constants (
Measurement varchar(10),
Currency numeric(3,0),
annum numeric(4,0))

Create table
Params (
Id varchar(25) ,
Measurement varchar(10),
Rounded numeric(1,0),
Basis bit,
CONSTRAINT PK_Params PRIMARY KEY (Id)

Create table

Nomenclature
(
Id varchar(25) ,
Nomenclature varchar(100),
Measurement varchar(10),
Comment varchar(100),
CONSTRAINT PK_Nomenclature PRIMARY KEY (Id)

И хочу создать внешний ключ. Поле одной таблицы ссылается на первичный ключ другой таблицы. И каскадное обновление ставлю.
Получается что для одной таблицы все получается, а для других он не дает поставить каскадное обновление.
выдает ошибку
"Не удалось создать связь "FK_Params_Measurements".
Введение ограничения внешнего ключа (FOREIGN KEY) "FK_Params_Measurements" для таблицы "Params" может привести к появлению циклов или множественных каскадных путей.
Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION либо измените другие ограничения внешнего ключа (FOREIGN KEY).
Нельзя создать ограничение. См. предыдущие ошибки.
"
ALTER TABLE Constants WITH CHECK ADD CONSTRAINT FK_Constants_Measurements
FOREIGN KEY (Measurement)
REFERENCES Measurements (Id)
ON UPDATE CASCADE


ALTER TABLE Params WITH CHECK ADD CONSTRAINT FK_Params_Measurements
FOREIGN KEY (Measurement)
REFERENCES Measurements(Id)
ON UPDATE CASCADE


ALTER TABLE Nomenclature WITH CHECK ADD CONSTRAINT FK_Nomenclature_Measurements
FOREIGN KEY (Measurement)
REFERENCES Measurements(Id)
ON UPDATE CASCADE


Как быть ????? Мне ограничение целостности на всех таблицах нужно ......
9 сен 13, 09:06    [14812003]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Tanya_0306
Как быть ?????

Уберите ON UPDATE CASCADE
9 сен 13, 09:16    [14812032]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Tanya_0306
Как быть ????? Мне ограничение целостности на всех таблицах нужно ......

В приведённой вами структуре нет "циклов или множественных каскадных путей". Приведите скрипты целиком. Сейчас, например, падает с ошибкой "Foreign key 'FK_Constants_Measurements' references invalid table 'Measurements'."
9 сен 13, 09:23    [14812064]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
Вот база данных полностью и внешние ключи.

К сообщению приложен файл (Create table.docx - 20Kb) cкачать
9 сен 13, 13:56    [14813896]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
АУ!! Кто-нибудь подскажите!!
11 сен 13, 07:40    [14823968]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Tanya_0306
АУ!! Кто-нибудь подскажите!!

Все написано в сообщении. "Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION либо измените другие ограничения внешнего ключа"
11 сен 13, 09:10    [14824115]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Tanya_0306
АУ!! Кто-нибудь подскажите!!
У вас модель данных такая, что автоматическое каскадное удаление невозможно, поскольку оно должно быть рекурсивным.
Посмотрите на связи Params, Measurements и Basises
11 сен 13, 09:25    [14824174]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
Гость333
Member

Откуда:
Сообщений: 3683
alexeyvg
Tanya_0306
АУ!! Кто-нибудь подскажите!!
У вас модель данных такая, что автоматическое каскадное удаление невозможно, поскольку оно должно быть рекурсивным.
Посмотрите на связи Params, Measurements и Basises

Причём, как правило, "циклы или множественные каскадные пути" указывают на проблемы в проектировании схемы данных.
11 сен 13, 10:01    [14824360]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Гость333
alexeyvg
пропущено...
У вас модель данных такая, что автоматическое каскадное удаление невозможно, поскольку оно должно быть рекурсивным.
Посмотрите на связи Params, Measurements и Basises

Причём, как правило, "циклы или множественные каскадные пути" указывают на проблемы в проектировании схемы данных.
Ну да, в данном случае это зависит от смысла ссылки на Params из Basises, возможно это просто ошибка.
11 сен 13, 10:09    [14824378]     Ответить | Цитировать Сообщить модератору
 Re: Создание внешних ключей SQL Server  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Tanya_0306,

Вообще, опишите словами назначение таблиц Basises, Measurements, Params и их столбцов.
11 сен 13, 10:13    [14824401]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить