powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связь многие ко многим в SQL Server с реализацией каскадных действий
10 сообщений из 10, страница 1 из 1
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35680706
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Server 2005.
Некие объекты имеют произвольный набор свойств.
Объекты находятся в одной таблице (таблица Objects), а свойства - в подчиненной (таблица ConstructionProperties).
В случае необходимости нужно иметь возможность установить связи между нужными свойствами двух объектов (я реализовал это через таблицу Subtractions). При удалении одного из объектов удаляются и все его свойства (каскадность), а соответственно, созданная нами связь утрачивает свою актуальность, т.е. ее нужно так же удалять.
Но удалить может быть любой из участников связи, т.о. каскадные действия нужны для каждой связи, относящейся к таблице Subtractions.

Фрагмент схемы:



Первая табла содержит свойства объектов. Вторая связывает свойства одних объектов со свойствами других. Т.о. Вторая табла содержит инфу КОГО с КЕМ связать.

Я хочу, чтобы в случае удаления участника связи (КОГО или С КЕМ - без разницы, любого из участников отношения) происходило автоматическое удаление записи из таблицы содержащей инфу по связям (логично, что в отсутствии одного из участников связь становится не нужна).

Создаю две связи с каскадными действиями каждая. Но млин SQL Server разрешает сделать только одну (например я создал связь с каскадными действиями для поля КОГО)!
Создать аналогичную связь для поля С КЕМ не удается.

Получаю следующее:

Текст ошибки при попытке сохранения изменений в конструкторе таблицы'ConstructionProperties (Constructions)' table saved successfully
'Subtractions (Constructions)' table
- Unable to create relationship 'FK_Subtractions_ConstructionProperties1'.
Введение ограничения внешнего ключа (FOREIGN KEY) "FK_Subtractions_ConstructionProperties1" для таблицы "Subtractions" может привести к появлению циклов или множественных каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION либо измените другие ограничения внешнего ключа (FOREIGN KEY).
Нельзя создать ограничение. См. предыдущие ошибки.
Если для одной из связей установить каскадное обновление и удаление в ON DELETE NO ACTION или ON UPDATE NO ACTION - то сохранить удается. Но мне нужны каскадные действия для обоих связей.


Для ясности приведу пример: Имеются помещения. Каждое помещение имеет такое свойство как площадь стен. Но нам, строителям нужна не просто площадь стен, а площадь стен за вычетом дверных и оконных проемов. Т.о. нужно связать площадь стен помещения с площадями окон и дверей, входящим в состав помещения.
Надеюсь, что пример понятен.

Т.е. нужна реализация отношения многие ко многим, с возможностью каскадных действий .
В Access данная схема работает. На SQL Server 2005 получаю указанную выше ошибку.

Мне посоветовали задать сей вопрос в этой ветке.
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35680713
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С. Можно конечно через триггеры... Но на мой взгляд - это не "красиво" получается...
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35680838
Фотография Valentin Kotelnitski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumПервая табла содержит свойства объектов. Вторая связывает
свойства одних объектов со свойствами других.
может, первая таблица содержит свойства объекта, а вторая связывает одни его
свойства с другими?

далее не понял

еще далее:
CompositumДля ясности приведу пример: Имеются помещения. Каждое
помещение имеет такое свойство как площадь стен. Но нам, строителям нужна не
просто площадь стен, а площадь стен за вычетом дверных и оконных проемов.
Т.о. нужно связать площадь стен помещения с площадями окон и дверей,
входящим в состав помещения.

может, стоит чуть менее абстрагироваться и провести анализ в терминах
"помещение", "проем", возможно, "тип проема" c площадями, где нужно?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35680995
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kotelnitski
может, стоит чуть менее абстрагироваться и провести анализ в терминах
"помещение", "проем", возможно, "тип проема" c площадями, где нужно?

нет, это не нужно да и не правильно. конструктивов множество, выделять каждый из них в отдельный термин - значит значительно усложнять структуру БД. Кроме того, позиции сметы связаны со значениями таблицы свойств. Она одна, а по вашей логике получиться ,что мне нужно будет создавать таблицу свойств под кажды из терминов. Это не удобно. Будет гораздо сложнее привязывать смету к конструктиву. Создавая абстрактные объекты, которые потом пользователь конкретизирует я делаю возможным создание ЛЮБОГО объекта, при этом он так же может быть связан с любым количеством свойств ЛЮБЫХ других объектов. Это унивесальность. имхо.
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35681093
Фотография Valentin Kotelnitski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уже запутались (первый пост)
то, что Вы предлагаете, (мне кажется) это EAV - Entity-Attribute-Value - в
Wikipedii есть статья только на английском, может найдете на русском
но, как уже говорил, запутались в первом посте
постарайтесь сначала детально описать ВСЮ предметную область (как в
приведенном примере, только охватывая всю область), чтобы
лучше самому себе уяснить, что же Вам нужно. Может, на основе этого все-же
решитесь как-то детализировать и группировать Ваши объекты

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35681147
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kotelnitski
уже запутались (первый пост)
то, что Вы предлагаете, (мне кажется) это EAV - Entity-Attribute-Value - в
Wikipedii есть статья только на английском, может найдете на русском
но, как уже говорил, запутались в первом посте
постарайтесь сначала детально описать ВСЮ предметную область (как в
приведенном примере, только охватывая всю область), чтобы
лучше самому себе уяснить, что же Вам нужно. Может, на основе этого все-же
решитесь как-то детализировать и группировать Ваши объекты


мне просто нужна связь многие ко многим с возможностями каскадного удаления. всё. sql server не может это делать через связи (позволяет задать каскадность только для одной). вот и интересуюсь, кто как сие решает? Триггеры - понятное дело... Больше никак?
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35681305
Фотография Valentin Kotelnitski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
относительно каскадности - разве что еще из C# кода!
но запутался уже в первом посте, как и говорил
все что могу предложить - еще раз подумай над моими словами из предыдущих
постов

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35681329
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
триггер или процедура, другого не дано
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35681414
Хитроглазый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumДля ясности приведу пример: Имеются помещения. Каждое помещение имеет такое свойство как площадь стен. Но нам, строителям нужна не просто площадь стен, а площадь стен за вычетом дверных и оконных проемов. Т.о. нужно связать площадь стен помещения с площадями окон и дверей, входящим в состав помещения.
Надеюсь, что пример понятен.

не совсем понятно как это соотносится с фрагментом схемы в 1м посте
...
Рейтинг: 0 / 0
Связь многие ко многим в SQL Server с реализацией каскадных действий
    #35683038
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum пишет:

> Текст ошибки при попытке сохранения изменений в конструкторе таблицы
> 'ConstructionProperties (Constructions)' table saved successfully
> 'Subtractions (Constructions)' table
> - Unable to create relationship 'FK_Subtractions_ConstructionProperties1'.
> Введение ограничения внешнего ключа (FOREIGN KEY)
> "FK_Subtractions_ConstructionProperties1" для таблицы "Subtractions"
> может привести к появлению циклов или множественных каскадных путей.
> Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION либо измените другие
> ограничения внешнего ключа (FOREIGN KEY).
> Нельзя создать ограничение. См. предыдущие ошибки.

Тут не должно быть проблемы.
Это вы просто неверно создаёте коснтрейнты, где-то вы перепутали
PATENT и CHILD в связи.

Напишите CREATE TABLE-ы и ALTER-ы с констрейнтами, тогда может
кто-то подскажет, где что не так.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связь многие ко многим в SQL Server с реализацией каскадных действий
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]