powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильная реализация cascade delete
41 сообщений из 41, показаны все 2 страниц
Правильная реализация cascade delete
    #38716515
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Возникли сомнения в правильности построения архитектуры бд...
Есть две таблицы, ссылающиеся на одну (Addresses). У последней созданы два FK на первые таблицы с cascade delete.
Подскажите, правильно ли такое решение? И если нет. то как лучше реализовать?

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716543
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexВозникли сомнения в правильности построения архитектуры бд.

Заполни эти три таблицы реальными данными, потом удали что нибудь, посмотри что получилось и определись в своих сомнениях - кроме тебя, больше это никому не нужно...
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716572
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexЕсть две таблицы, ссылающиеся на одну (Addresses). У последней созданы два FK на первые
В этом месте меня начинает грызть смутное сомнение... :)
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716589
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опишу более подробно:
Есть две таблицы: Center1 и Center2.
К каждой из них привязан свой адрес (таблица Adresses с FK with casade delete на Center1.Center_Id и Center2.Center_Id).
Все удаляется как положено. Но интересует вопрос правильности такого подхода.
Возможно, стоит определить отдельную таблицу Centers с PK Center_Id и привязать адрес к ней, а уже от Centers по FK with cascade delete связывать Center1 и Center2?
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716591
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно так же определить отдельные Adress таблицы для Center1 и Center2 по один-к-одному, но это будет расточительно... Adresses буду в дальнейшем расширять, и возможно, такой подход подойдет. Но как быть,, например для неменяющихся типо
в, которые нужно связать для разных объектов по FK?
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716592
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexЕсть две таблицы: Center1 и Center2.
Чем они отличаются?

on delete cascade - само по себе must die.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716594
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
отличаются всем, кроме наличия адреса... а в чем недостаток cascade delete?
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716610
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexа в чем недостаток cascade delete?
В том, что он позволяет удалить из БД неожиданно много информации. БД создаются для
хранения информации, на её удаление требуется весьма веское основание.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716627
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsimlexа в чем недостаток cascade delete?
В том, что он позволяет удалить из БД неожиданно много информации. БД создаются для
хранения информации, на её удаление требуется весьма веское основание.

С другой стороны, если не удалить неожиданно много информации каскадно, то вполне ожиданно
в бд станет много никому не нужного мусора....
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716629
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно так же определить отдельные Adress таблицы для Center1 и Center2 по один-к-одному, но это будет расточительно... Adresses буду в дальнейшем расширять, и возможно, такой подход подойдет. Но как быть,, например для неменяющихся типо
в, которые нужно связать для разных объектов по FK?
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716648
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВ этом месте меня начинает грызть смутное сомнение... :)

Вы действительно говорите сумбурно и не связанно, трудно понять что вам нужно вообще...
Просто какой то набор слов по тематике....

simlexВозможно так же определить отдельные Adress таблицы для Center1 и Center2 по один-к-одному, но это будет расточительно... Adresses буду в дальнейшем расширять, и возможно, такой подход подойдет. Но как быть,, например для неменяющихся типо
в, которые нужно связать для разных объектов по FK?
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716651
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716653
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
simlex,
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716658
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, слова у него кончились, наскальная живопись пошла...

Обломись, нету тебе в жизни счастья.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716660
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlex,
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716668
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag, спасибо, но мне нужно чтобы при удалении либо Center1 либо Center2 удалялся связанный с ним Address. А по представленному рисунку ключи у меня не создаются. При добавлении внешнего ключа к Address (связь с Center1): "Столбцы в таблице Center1 не совпадают с существующим первичным ключом или ограничением UNIQUE"
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716673
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexvmag, спасибо, но мне нужно чтобы при удалении либо Center1 либо Center2 удалялся связанный с ним Address

Алгоритм удаления записи из Center1:
1. Найти удаляемую запись в Center1.
2. Проверить наличие в Center2 записей с id_adres как в удаляемой из Center1.
3. Если записи в Center2 есть, то удаляем только запись из Center1, если нет, то удаляем и запись Center1 и запись Adress по id_adres.

Алгоритм удаления записи из Center2
аналогично по смыслу...

Можно вообще не парится, а периодически запускать процедуру, которая будет удалять все адреса,
не имеющие подчиненных записей ни в Center1 ни в Center2


simlexА по представленному рисунку ключи у меня не создаются. При добавлении внешнего ключа к Address (связь с Center1): "Столбцы в таблице Center1 не совпадают с существующим первичным ключом или ограничением UNIQUE"

Это нужно делать на пустой БД и иметь ввиду, что в моей схеме всё наоборот с ключами - первичный в Adress а вторичные в Center1 и Center2
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716676
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag, спасибо. вопрос закрыт. если интересно, отпишусь, подготовив разширеный обзор проблемы и решения
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716681
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexесли интересно, отпишусь, подготовив разширеный обзор проблемы и решения
Не интересно. Поскольку правильным решением является выкидывание таблицы address к ЧМ и
внесения адресов прямо в таблицы centrum1/2.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716682
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за предметная область такая, что по одному адресу может множество каких-то центров быть. Как пр мне, одной, максимум двух таблиц на это дело хватит
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716689
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris,на один центр - один адрес.
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716691
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, зачем в таблицах дополнительные ненужные поля, если можно обойтись теми же двумя (Center1_Id и Center2_Id (при нашем примере)) в Address?
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716698
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexPallaris,на один центр - один адрес.

Вам бы озвучить просто изначальную проблему без своих идей по её реализации, а то вы так только всех путаете... Зачем две одинаковые таблицы Center ????

Пусть тогда будет одна таблица Center с текстовым полем адрес и всё...
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716700
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag, таблицы Center1 и Center2 simlexотличаются всем, кроме наличия адреса
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716703
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexvmag, таблицы Center1 и Center2 simlexотличаются всем, кроме наличия адреса

Посмотрите на своё пикасо.... они как раз абсолютно одинаковые (по структуре и названиях полей) кроме названий....
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716705
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,учту. Буду описывать проблему более детально. Но если создаются две таблицы, значит на это есть свои причины: в частности расширяемость предметной области Center1 и Center2 в разных направлениях
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716706
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlex,

Мля... да добавь ты еще одно поле (код_направления) и главную таблицу Направления... пипец... а если будет 100 направлений ? Будет 100 таблиц Center ???? Мдя.... не будет счастья....
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716708
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlex,

Одна таблица Центр и адрес тупо текстовое поле...
Дальше нет смысла обсуждать ибо обсуждаем не саму проблему, а твоё видение проблемы,
которую ты никому не собираешься говорить и скорее всего даже сам не правильно понимаешь
саму эту проблему...
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716711
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexзачем в таблицах дополнительные ненужные поля
Адрес - одно поле. И оно - нужное. Ели тебе не нужен адрес - вообще его выкинь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716714
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, как тогда насчет cascade delete для Address? с таким подходом...
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716715
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovО, слова у него кончились, наскальная живопись пошла...

Обломись, нету тебе в жизни счастья.

Мдя... наверное на этом и нужно было всё закончить
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716716
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,
Дальше нет смысла обсуждать ибо обсуждаем не саму проблему, а твоё видение проблемы-как прикажете...
в разных направлениях относится к ООП. Повторюсь, Center1 и Center2
отличаются всем, кроме наличия адреса
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716718
simlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag, если к этому
привентить ORM, то вообще ничего работать не будет без навигационных свойств в Address.
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716740
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovsimlexЕсть две таблицы: Center1 и Center2.
Чем они отличаются?

on delete cascade - само по себе must die.

Предлагаете пользователю сначала помучиться, удаляя по одной записи во всех подчиненных таблицах , прежде чем он доберется до главной?
Хотя решение автора на самом деле несколько странное
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716741
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoffmanПредлагаете пользователю сначала помучиться, удаляя по одной записи во всех подчиненных таблицах , прежде чем он доберется до главной?

Сама идея удалять адрес из модели несколько странная - что, дом снесли?

Достаточно добавить поле ARCHIVE во все таблицы, и выводить в представление, только если =null.
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716743
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simlexvmag, если к этому
привентить ORM, то вообще ничего работать не будет без навигационных свойств в Address.

Когда вы уже перестанете употреблять несвязанные между собой наборы слов ???
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38716746
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
за center1 и center2 руки отрубать надо
а так же за перевернутую связь между center и address

как надо:

table center (Id, Name, Desc, MainImageUrl, AddressId)
table address (Id, ...)
FK center.AddressId = address.Id

и никакого каскадного удаления, так как по одному адресу могут находится несколько объектов
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38717717
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisGoffmanПредлагаете пользователю сначала помучиться, удаляя по одной записи во всех подчиненных таблицах , прежде чем он доберется до главной?

Сама идея удалять адрес из модели несколько странная - что, дом снесли?

Достаточно добавить поле ARCHIVE во все таблицы, и выводить в представление, только если =null.

... по требованию ... обязан прекратить хранение, обработку...
p.s. Ещё бывают неправильно введённые, задвоенные операторами и т.д. on delete cascade ставится там где содержимое таблицы детализации является лишь уточнением для главной таблицы, в случае когда сами записи не несут какой-то осмысленной нагрузки в бизнесс процессах компании, как пример справочник контрагентов
Contragetns (
ID /*PK*/ )

Legals (
ID_CONTRAGENTS /*PK, FK Contragents(ID)*/
INN )

Persons (
ID_CONRTAGENTS /*PK, FK Contragents(ID)*/
FIO )

как таковые записи с одним ID в таблицах являются плоскими данными по одному из видов контрагентов, все же реальные документы в базе завязаны на ID из Contragents ( в большинстве случаев, при этом завязаны с параметром on delete restrict) поэтому никакого смысла в последовательном удалении вручную, а не средствами ключа on delete cascade нет.
p.p.s. правила удаления/архивирования документов также не всегда очевидны, с одной стороны можно всех юр. лиц архивировать ( даже если тупо неправильно завели ) с другой стороны можно повесить ограничения на inn/kpp (для простого случая, пока филиальную систему не будем рассматривать, либо физикам на номер паспорта ), таким образом если пользоваться меткой архив, а не физическим удалением, станет проблематично использовать встроенные в БД средства контроля уникальности данных.
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38718658
2604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag ...
Когда вы уже перестанете употреблять несвязанные между собой наборы слов ???
++




как лично понял ТСа :

он хочет при удалении записи в Детайл таблице(ах)
снести соответствующее в Мэйн-таблице

....

эээ
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38718713
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2604,

Тут много странностей...
С одной стороны ТС понимает, что таблица adres должна быть одна, а писать ул. Пушкина в таблицу adres1, ул. Мира в таблицу adres2, ул. Ленина в adres3... это есть высшая степень идиотизма...
С другой стороны плодить множество одинаковых по структуре таблиц для хранения информации о центрах - автор считает совсем не идиотизмом, а...
simlexНо если создаются две таблицы, значит на это есть свои причины: в частности расширяемость предметной области Center1 и Center2 в разных направлениях
...
Рейтинг: 0 / 0
Правильная реализация cascade delete
    #38718771
2604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
simlexЗдравствуйте ! Возникли сомнения в правильности построения архитектуры бд ...
Есть две таблицы, ссылающиеся на одну (Addresses). У последней созданы два FK на первые таблицы с cascade delete.
Подскажите, правильно ли такое решение? И если нет. то как лучше реализовать?
если Addresses - Справочник
то ФК там могут быть

если это починенный Справочник(ФК Владельца)
+
какой-нить атрибут в нем(ФК другого Справочника)

ну и тд
и тд
мля - чо написал - сам фигею...



без сомнений
Ваши сомнения - не зря



а и ваще
(С) on delete cascade - само по себе must die .
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильная реализация cascade delete
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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