|
|
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Возникли сомнения в правильности построения архитектуры бд... Есть две таблицы, ссылающиеся на одну (Addresses). У последней созданы два FK на первые таблицы с cascade delete. Подскажите, правильно ли такое решение? И если нет. то как лучше реализовать? Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 13:28 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexВозникли сомнения в правильности построения архитектуры бд. Заполни эти три таблицы реальными данными, потом удали что нибудь, посмотри что получилось и определись в своих сомнениях - кроме тебя, больше это никому не нужно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 14:52 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexЕсть две таблицы, ссылающиеся на одну (Addresses). У последней созданы два FK на первые В этом месте меня начинает грызть смутное сомнение... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 17:58 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Опишу более подробно: Есть две таблицы: Center1 и Center2. К каждой из них привязан свой адрес (таблица Adresses с FK with casade delete на Center1.Center_Id и Center2.Center_Id). Все удаляется как положено. Но интересует вопрос правильности такого подхода. Возможно, стоит определить отдельную таблицу Centers с PK Center_Id и привязать адрес к ней, а уже от Centers по FK with cascade delete связывать Center1 и Center2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 19:15 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Возможно так же определить отдельные Adress таблицы для Center1 и Center2 по один-к-одному, но это будет расточительно... Adresses буду в дальнейшем расширять, и возможно, такой подход подойдет. Но как быть,, например для неменяющихся типо в, которые нужно связать для разных объектов по FK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 19:20 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexЕсть две таблицы: Center1 и Center2. Чем они отличаются? on delete cascade - само по себе must die. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 19:22 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
отличаются всем, кроме наличия адреса... а в чем недостаток cascade delete? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 19:25 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexа в чем недостаток cascade delete? В том, что он позволяет удалить из БД неожиданно много информации. БД создаются для хранения информации, на её удаление требуется весьма веское основание. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 20:16 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovsimlexа в чем недостаток cascade delete? В том, что он позволяет удалить из БД неожиданно много информации. БД создаются для хранения информации, на её удаление требуется весьма веское основание. С другой стороны, если не удалить неожиданно много информации каскадно, то вполне ожиданно в бд станет много никому не нужного мусора.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 21:33 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Возможно так же определить отдельные Adress таблицы для Center1 и Center2 по один-к-одному, но это будет расточительно... Adresses буду в дальнейшем расширять, и возможно, такой подход подойдет. Но как быть,, например для неменяющихся типо в, которые нужно связать для разных объектов по FK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 21:37 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
softwarerВ этом месте меня начинает грызть смутное сомнение... :) Вы действительно говорите сумбурно и не связанно, трудно понять что вам нужно вообще... Просто какой то набор слов по тематике.... simlexВозможно так же определить отдельные Adress таблицы для Center1 и Center2 по один-к-одному, но это будет расточительно... Adresses буду в дальнейшем расширять, и возможно, такой подход подойдет. Но как быть,, например для неменяющихся типо в, которые нужно связать для разных объектов по FK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 22:09 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 22:18 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlex, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 22:22 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
О, слова у него кончились, наскальная живопись пошла... Обломись, нету тебе в жизни счастья. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 22:33 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlex, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 22:34 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
vmag, спасибо, но мне нужно чтобы при удалении либо Center1 либо Center2 удалялся связанный с ним Address. А по представленному рисунку ключи у меня не создаются. При добавлении внешнего ключа к Address (связь с Center1): "Столбцы в таблице Center1 не совпадают с существующим первичным ключом или ограничением UNIQUE" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 23:10 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 23:31 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
vmag, спасибо. вопрос закрыт. если интересно, отпишусь, подготовив разширеный обзор проблемы и решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 23:33 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexесли интересно, отпишусь, подготовив разширеный обзор проблемы и решения Не интересно. Поскольку правильным решением является выкидывание таблицы address к ЧМ и внесения адресов прямо в таблицы centrum1/2. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 23:54 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Что за предметная область такая, что по одному адресу может множество каких-то центров быть. Как пр мне, одной, максимум двух таблиц на это дело хватит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2014, 23:55 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Pallaris,на один центр - один адрес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 00:33 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, зачем в таблицах дополнительные ненужные поля, если можно обойтись теми же двумя (Center1_Id и Center2_Id (при нашем примере)) в Address? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 00:36 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexPallaris,на один центр - один адрес. Вам бы озвучить просто изначальную проблему без своих идей по её реализации, а то вы так только всех путаете... Зачем две одинаковые таблицы Center ???? Пусть тогда будет одна таблица Center с текстовым полем адрес и всё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:00 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
vmag, таблицы Center1 и Center2 simlexотличаются всем, кроме наличия адреса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:05 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexvmag, таблицы Center1 и Center2 simlexотличаются всем, кроме наличия адреса Посмотрите на своё пикасо.... они как раз абсолютно одинаковые (по структуре и названиях полей) кроме названий.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:10 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
vmag,учту. Буду описывать проблему более детально. Но если создаются две таблицы, значит на это есть свои причины: в частности расширяемость предметной области Center1 и Center2 в разных направлениях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:13 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlex, Мля... да добавь ты еще одно поле (код_направления) и главную таблицу Направления... пипец... а если будет 100 направлений ? Будет 100 таблиц Center ???? Мдя.... не будет счастья.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:16 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlex, Одна таблица Центр и адрес тупо текстовое поле... Дальше нет смысла обсуждать ибо обсуждаем не саму проблему, а твоё видение проблемы, которую ты никому не собираешься говорить и скорее всего даже сам не правильно понимаешь саму эту проблему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:25 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexзачем в таблицах дополнительные ненужные поля Адрес - одно поле. И оно - нужное. Ели тебе не нужен адрес - вообще его выкинь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:32 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, как тогда насчет cascade delete для Address? с таким подходом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:42 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovО, слова у него кончились, наскальная живопись пошла... Обломись, нету тебе в жизни счастья. Мдя... наверное на этом и нужно было всё закончить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:46 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
vmag, Дальше нет смысла обсуждать ибо обсуждаем не саму проблему, а твоё видение проблемы-как прикажете... в разных направлениях относится к ООП. Повторюсь, Center1 и Center2 отличаются всем, кроме наличия адреса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:48 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
vmag, если к этому привентить ORM, то вообще ничего работать не будет без навигационных свойств в Address. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 01:54 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovsimlexЕсть две таблицы: Center1 и Center2. Чем они отличаются? on delete cascade - само по себе must die. Предлагаете пользователю сначала помучиться, удаляя по одной записи во всех подчиненных таблицах , прежде чем он доберется до главной? Хотя решение автора на самом деле несколько странное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 09:58 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
GoffmanПредлагаете пользователю сначала помучиться, удаляя по одной записи во всех подчиненных таблицах , прежде чем он доберется до главной? Сама идея удалять адрес из модели несколько странная - что, дом снесли? Достаточно добавить поле ARCHIVE во все таблицы, и выводить в представление, только если =null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 10:08 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexvmag, если к этому привентить ORM, то вообще ничего работать не будет без навигационных свойств в Address. Когда вы уже перестанете употреблять несвязанные между собой наборы слов ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 10:30 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
за center1 и center2 руки отрубать надо а так же за перевернутую связь между center и address как надо: table center (Id, Name, Desc, MainImageUrl, AddressId) table address (Id, ...) FK center.AddressId = address.Id и никакого каскадного удаления, так как по одному адресу могут находится несколько объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2014, 10:46 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
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 (для простого случая, пока филиальную систему не будем рассматривать, либо физикам на номер паспорта ), таким образом если пользоваться меткой архив, а не физическим удалением, станет проблематично использовать встроенные в БД средства контроля уникальности данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 00:03 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
vmag ... Когда вы уже перестанете употреблять несвязанные между собой наборы слов ??? ++ как лично понял ТСа : он хочет при удалении записи в Детайл таблице(ах) снести соответствующее в Мэйн-таблице .... эээ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:05 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
2604, Тут много странностей... С одной стороны ТС понимает, что таблица adres должна быть одна, а писать ул. Пушкина в таблицу adres1, ул. Мира в таблицу adres2, ул. Ленина в adres3... это есть высшая степень идиотизма... С другой стороны плодить множество одинаковых по структуре таблиц для хранения информации о центрах - автор считает совсем не идиотизмом, а... simlexНо если создаются две таблицы, значит на это есть свои причины: в частности расширяемость предметной области Center1 и Center2 в разных направлениях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:09 |
|
||
|
Правильная реализация cascade delete
|
|||
|---|---|---|---|
|
#18+
simlexЗдравствуйте ! Возникли сомнения в правильности построения архитектуры бд ... Есть две таблицы, ссылающиеся на одну (Addresses). У последней созданы два FK на первые таблицы с cascade delete. Подскажите, правильно ли такое решение? И если нет. то как лучше реализовать? если Addresses - Справочник то ФК там могут быть если это починенный Справочник(ФК Владельца) + какой-нить атрибут в нем(ФК другого Справочника) ну и тд и тд мля - чо написал - сам фигею... без сомнений Ваши сомнения - не зря а и ваще (С) on delete cascade - само по себе must die . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 20:31 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1540825]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 393ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...