Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.036 c
15-1141992054
ANB
2006-03-10 15:00
2006.04.02
Просьба к модераторам


2-1142436458
ctudent
2006-03-15 18:27
2006.04.02
Помогите разобраться!


2-1142511533
KyRo
2006-03-16 15:18
2006.04.02
Отключить ошибку в ини файле


11-1123157267
Muller
2005-08-04 16:07
2006.04.02
Как заменить подменю на другое?


2-1142925028
Handle
2006-03-21 10:10
2006.04.02
TListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский