|
|
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
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 получаю указанную выше ошибку. Мне посоветовали задать сей вопрос в этой ветке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 00:11 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
П.С. Можно конечно через триггеры... Но на мой взгляд - это не "красиво" получается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 00:22 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
CompositumПервая табла содержит свойства объектов. Вторая связывает свойства одних объектов со свойствами других. может, первая таблица содержит свойства объекта, а вторая связывает одни его свойства с другими? далее не понял еще далее: CompositumДля ясности приведу пример: Имеются помещения. Каждое помещение имеет такое свойство как площадь стен. Но нам, строителям нужна не просто площадь стен, а площадь стен за вычетом дверных и оконных проемов. Т.о. нужно связать площадь стен помещения с площадями окон и дверей, входящим в состав помещения. может, стоит чуть менее абстрагироваться и провести анализ в терминах "помещение", "проем", возможно, "тип проема" c площадями, где нужно? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 08:25 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
Valentin Kotelnitski может, стоит чуть менее абстрагироваться и провести анализ в терминах "помещение", "проем", возможно, "тип проема" c площадями, где нужно? нет, это не нужно да и не правильно. конструктивов множество, выделять каждый из них в отдельный термин - значит значительно усложнять структуру БД. Кроме того, позиции сметы связаны со значениями таблицы свойств. Она одна, а по вашей логике получиться ,что мне нужно будет создавать таблицу свойств под кажды из терминов. Это не удобно. Будет гораздо сложнее привязывать смету к конструктиву. Создавая абстрактные объекты, которые потом пользователь конкретизирует я делаю возможным создание ЛЮБОГО объекта, при этом он так же может быть связан с любым количеством свойств ЛЮБЫХ других объектов. Это унивесальность. имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 09:49 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
уже запутались (первый пост) то, что Вы предлагаете, (мне кажется) это EAV - Entity-Attribute-Value - в Wikipedii есть статья только на английском, может найдете на русском но, как уже говорил, запутались в первом посте постарайтесь сначала детально описать ВСЮ предметную область (как в приведенном примере, только охватывая всю область), чтобы лучше самому себе уяснить, что же Вам нужно. Может, на основе этого все-же решитесь как-то детализировать и группировать Ваши объекты Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 10:27 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
Valentin Kotelnitski уже запутались (первый пост) то, что Вы предлагаете, (мне кажется) это EAV - Entity-Attribute-Value - в Wikipedii есть статья только на английском, может найдете на русском но, как уже говорил, запутались в первом посте постарайтесь сначала детально описать ВСЮ предметную область (как в приведенном примере, только охватывая всю область), чтобы лучше самому себе уяснить, что же Вам нужно. Может, на основе этого все-же решитесь как-то детализировать и группировать Ваши объекты мне просто нужна связь многие ко многим с возможностями каскадного удаления. всё. sql server не может это делать через связи (позволяет задать каскадность только для одной). вот и интересуюсь, кто как сие решает? Триггеры - понятное дело... Больше никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 10:43 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
относительно каскадности - разве что еще из C# кода! но запутался уже в первом посте, как и говорил все что могу предложить - еще раз подумай над моими словами из предыдущих постов Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 11:17 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
триггер или процедура, другого не дано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 11:22 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
CompositumДля ясности приведу пример: Имеются помещения. Каждое помещение имеет такое свойство как площадь стен. Но нам, строителям нужна не просто площадь стен, а площадь стен за вычетом дверных и оконных проемов. Т.о. нужно связать площадь стен помещения с площадями окон и дверей, входящим в состав помещения. Надеюсь, что пример понятен. не совсем понятно как это соотносится с фрагментом схемы в 1м посте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 11:43 |
|
||
|
Связь многие ко многим в SQL Server с реализацией каскадных действий
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 20:58 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=95&tid=1543547]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 374ms |

| 0 / 0 |
