Текущий архив: 2006.04.02;
Скачать: CL | DM;
ВнизReferential Integrity,не пускает удалить. Найти похожие ветки
← →
John_Doe (2006-02-07 13:50) [0]При создании "Referential Integrity",я связал этой защитой, одно из полей связной таблицы с ключевым полем главной.
И указал "Cascade",флажок над "Strict Referential integrity" убрал.
Теперь вроде при изменении ключевого поля в главной,аналогичные изменения должны произойти и в связанной.
Так и есть...
Когда я модифицирую значение в главной,оно меняется и во второй таблице.
Но когда пытаюсь удалить запись в главной,он отказывается это делать.
Вот сообщение:
"Master has detail records. Cannot delete or modify."
"У таблицы есть подчиненная.Нельяз удолить или изменить".
Но ведь я указал "Cascade",а не "Prohibit".
И мне надо,чтоб удалялись все подчиненные записи.
Почему не работает,и как обойти?
PS.Использую для создания Paradox 7 - Database Desctop.
Не очень нравится...
Есть некоторые глюки.
Может вы знаете,какую нибудь другую прогу?
← →
Desdechado © (2006-02-07 17:01) [1]update Cascade - это на изменения
delete cascade - это на удаление
что там делал?
а лучше забей на парадокс, для обучения возьми что-то SQL-подобное, например, FireBird
← →
John_Doe (2006-02-07 17:27) [2]
> delete cascade
Увы,в Database Desctop этой опции нет.
Там есть Cascade(теоретически - и для модификации и для удаления,но на практике не совсем так :-) ),и Prohibit(запретить).
> а лучше забей на парадокс
Увы,требуют таблицу в PaRaDox. :-(
← →
msguns © (2006-02-07 17:36) [3]Судя по
"Когда я модифицирую значение в главной,оно меняется и во второй таблице",
в качестве первичных ключей используем нативные реквизиты, а это бандитизьм ;)
Все эти каскады и внешние ссылки в парадоксе более-менее работают только в чисто в однопользовательском режиме.
Реально все это глючит по-взрослому.
Резюм: Уйти от парадокса либо всю логику (каскады, целостности и т.д) пихать в "клиента".
← →
Desdechado © (2006-02-07 17:45) [4]> требуют таблицу в PaRaDox
можно сделать экспорт
← →
John_Doe (2006-02-07 17:47) [5]
> нативные реквизиты
Что это?
> Уйти от парадокса либо всю логику
А можно ли как-то использовать Referential Integrity,через сам компонент TTable? Не пребегая к этому Desktop"у.
В принципе,на худой конец можно воспользоваться TBatchMove.
Но это будет просто маразм,уже представляю.
> парадоксе более-менее работают только в чисто в однопользовательском
> режиме
Так у меня БД - локальная.
И тут норамльно не работает. :-(
Пристрелил бы кто этот Парадокс.
← →
msguns © (2006-02-07 17:54) [6]"Нативные" - это естественные, имеющие реальный смысл. Например, объект "служащий" имеет такие нативные реквизиты, как фам-я, имя, отчество, год рождения, адрес, таб. №, оклад и т.д.
При построении модели данных, проектируя сложные, "многоэтажные" сущности, категорически не рекомендуется в качестве связок между "этажами" использовать один или несколько нативных реквизитов. Для этого существуют автоинкрементые идентификаторы (UID), механизм обеспечения уникальности которых есть практически во всех СУБД.
← →
Desdechado © (2006-02-07 18:18) [7]msguns © (07.02.06 17:54) [6]
продолжу :)
при использовании суррогатных, а не нативных ключей, обычно исчезает необходимость ON UPDATE CASCADE, и чревычайно редко появляется необходимость ON DELETE CASCADE
← →
John_Doe (2006-02-07 18:25) [8]
> Для этого существуют автоинкрементые идентификаторы (UID),
> механизм обеспечения уникальности которых есть практически
> во всех СУБД.
> обычно исчезает необходимость ON UPDATE CASCADE, и чревычайно
> редко появляется необходимость ON DELETE CASCADE
msguns"у и Desdechado"у:
Спасибо,я так и поступлю.
Действительно хороший выход.
← →
Desdechado © (2006-02-07 19:13) [9]это не выход, это основной подход, основанный на ПРАВИЛАХ НОРМАЛИЗАЦИИ таблиц
← →
John_Doe (2006-02-07 20:18) [10]Уже переделал.
Так гораздо лучше,чувствую что грамотнее.
Но все же отсается открытм вот какой вопрос:
Как сделать так,чтоб при удалении записи в головной таблице,соответствующие записи в подчиненной тоже удалялись.
Ведь должен же быть выход,сделать это без чертовой технологии целостности данных.
← →
Desdechado © (2006-02-07 21:03) [11]при выполнения удаления:
1. стартовать транзакцию
2. удалить в подчиненной таблице все записи, ссылающиеся на главную
3. удалить запись в гдавной
4. подтвердить транзакцию
но, имхо, странно, что тебе сразу такое понадобилось делать
что за задача хоть?
← →
Anatoly Podgoretsky © (2006-02-07 21:39) [12]Парадокс не поддерживает каскадных удалений, а только ссылочную целостность.
← →
John_Doe (2006-02-07 22:14) [13]
> Парадокс не поддерживает каскадных удалений, а только ссылочную
> целостность.
Из-за всего в совокупности,поступило предложение пристрелить PaRaDox. :-)
> но, имхо, странно, что тебе сразу такое понадобилось делать
> что за задача хоть?
Задача такая:
Есть первая таблица - Stoks(склады),и есть таблица Ware(Товары).
В ComboBox закружается список имен складов из Stocks.
При выборе определенного склада в ComboBox"е,в гриде выпадает список всех товаров хранящихся в данном складе.
Следовательно,если я удаляю в Stocks,некоторый склад,то и товары находящиеся в нем,они тоже подлежат удалению.
А так выходит,что после удаления склада,товары хоть на свет больше и не выходят,даже если введу название склада заново(так как утерян исходный ключ удаленного склада),но в таблице все же остаются.
Пользователь естественно не узнает о том,что они остались.
Но считаю это неграмотно.
"Прятать грязь под диван,под стол,за шкаф."
← →
Desdechado © (2006-02-07 22:28) [14]товар при удалении склада должен распродаваться или переезжать на другой склад
если, конечно, удаление<>пожар
← →
msguns © (2006-02-08 09:25) [15]>John_Doe (07.02.06 22:14) [13]
>Следовательно,если я удаляю в Stocks,некоторый склад,то и товары находящиеся в нем,они тоже подлежат удалению.
Господи, ужастик прям какой-то ?
А как это, "Удалю склад", в смысле бомбу на него фугасную, эге ?
Абсолютно все движение товаров на складе (и не только) должно быть построено на материальных документах - накладных. Ни одну единицу товара нельзя "добавить" или "удалить" на складе. Можно лишь изменить кол-во (опосредовано) остатка, введя соответствующий документ (приходный или расходный)
Кто ставил задачу ? В кого кидать тухлые яйца и кизяки ?
← →
John_Doe (2006-02-08 13:29) [16]
> Кто ставил задачу ? В кого кидать тухлые яйца и кизяки ?
Таинственый человек в черной шляпе. :-)
А если серьезно,то сказали:
"При удалении склада,должен уничтожаться и товар."
Я незнаю,может конфискация?
Но в этом случае,могу просто булево поле ввести.
Спрашивал.
Сказали - "Только удалить."
← →
msguns © (2006-02-08 14:26) [17]>John_Doe (08.02.06 13:29) [16]
>А если серьезно,то сказали:
>"При удалении склада,должен уничтожаться и товар."
Excel+Macros
Страницы: 1 вся ветка
Текущий архив: 2006.04.02;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.04 c