Вопрос № 55977: Доброго всем времяпровождения в сети!
Имеется БД, в главной таблице которой имеется поле Key, существует также подчиненная таблица, связь с которой осуществляется через поле LinkKey (связанные таблицы)
Вопрос:
При удалении с главной табли...
Вопрос № 55.977
Доброго всем времяпровождения в сети!
Имеется БД, в главной таблице которой имеется поле Key, существует также подчиненная таблица, связь с которой осуществляется через поле LinkKey (связанные таблицы)
Вопрос:
При удалении с главной таблицы записи, как удалить записи (может быть несколько) из подчиненной таблицы, в которой LinkKey=Key
Отвечает: Карпов Алексей
Здравствуйте, Герасименко Алексей Анатольевич!
Установите в свойствах связи: enforce referential integrity - или что-то вроде, далее необходимо отметить каскадное удаление связаных записей. Удачи!
Ответ отправил: Карпов Алексей (статус: 4-ый класс)
Ответ отправлен: 19.09.2006, 15:53 Оценка за ответ: 5
Отвечает: Архангельский Андрей Германович
Здравствуйте, Герасименко Алексей Анатольевич!
И все-таки какая БД, на чем построена
Если стандартный SQL, то связь устанавливается следующим образом
Create table Proba (
Field1 Integer not null primary key,
Key Integer references CrosTable on update cascade on delete cascade,
и т.д.
Ключевое слово on delete cascade и говорит о том, что при удалении записи в таблице CrosTable, связанные с ней записи в таблице Proba будут удалены автоматически.
Можно то же самое сделать через триггеры
Уточни вопрос и ситуацию
--------- Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Герасименко Алексей Анатольевич!
Связи между таблицами можно установить при создании , например CREATE TABLE в опциях имеется FOREIGN KEY , который настраивается на поле типа PRIMARY KEY в основной таблице .
Если связь между таблицами установлена , то удаление в подчиненной таблице производится автоматически.
На практике такое не всегда желательно .
В приложениях, которые используют базу данных только для хранения информации желательно предусмотреть такие операции : создание уникальных ключей ( в Access тип поля СЧЕТЧИК имеется , а MS SQL Server такого типа поля уже нет ) ; проверка на корректность вводимых данных и соответствие их типа либо перевод в нужный тип данных ; каскадное удаление записей в связанных таблицах с проверкой на возможность такого удаления - не всегда удаление основной записи и каскадом подчиненных правильно , особенно в бухгалтерских
приложениях .
В этом случае в самой базе не настраиваются никакие связи , а за всем следит программа .
В моей практике я избегаю таких вариантов - выполняю проверку в подчиненных таблицах ( в последней программе было пять уровней вложения ) и предлагаю пользователю сначала удалить движение и т.д.
С уважением.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 5-ый класс)
Ответ отправлен: 19.09.2006, 16:27 Оценка за ответ: 5
Отвечает: Игорь Елизаров
Здравствуйте, Герасименко Алексей Анатольевич!
Лучше все-таки проверит наличие данных в НУЖНОЙ связанной таблице и удалить их, после этого удалить запись из исходной таблицы.
Просто вполне возможен вариант, что это ключевое поле является общим для нескольких таблиц, в этом случае удаляя, скажем, запись о номере телефона сотрудника можно запросто грохнуть всю информацию о сотруднике..
С уважением, Игорь
Ответ отправил: Игорь Елизаров (статус: 6-ой класс)
Ответ отправлен: 19.09.2006, 18:09