Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.06 c
2-1142401391
Gamer
2006-03-15 08:43
2006.04.02
Как запретить копирование диска и как ...?


1-1141213505
Aleksandr.
2006-03-01 14:45
2006.04.02
Что случилось с GetHeapStatus?


2-1142835729
pkm
2006-03-20 09:22
2006.04.02
Помогите с массивом


11-1123414583
EVILDeath
2005-08-07 15:36
2006.04.02
Опять proxies =(


1-1140966331
DR0N
2006-02-26 18:05
2006.04.02
Как сделать что бы форма меняла размеры проаорционально?