Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 151
от 24.09.2006, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 350, Экспертов: 47
В номере:Вопросов: 1, Ответов: 4


Вопрос № 55977: Доброго всем времяпровождения в сети! Имеется БД, в главной таблице которой имеется поле Key, существует также подчиненная таблица, связь с которой осуществляется через поле LinkKey (связанные таблицы) Вопрос: При удалении с главной табли...

Вопрос № 55.977
Доброго всем времяпровождения в сети!
Имеется БД, в главной таблице которой имеется поле Key, существует также подчиненная таблица, связь с которой осуществляется через поле LinkKey (связанные таблицы)
Вопрос:
При удалении с главной таблицы записи, как удалить записи (может быть несколько) из подчиненной таблицы, в которой LinkKey=Key
Отправлен: 19.09.2006, 15:43
Вопрос задал: Герасименко Алексей Анатольевич (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Карпов Алексей
Здравствуйте, Герасименко Алексей Анатольевич!
Установите в свойствах связи: 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 будут удалены автоматически.

Можно то же самое сделать через триггеры
Уточни вопрос и ситуацию
---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 19.09.2006, 16:04
Оценка за ответ: 5

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Герасименко Алексей Анатольевич!

Связи между таблицами можно установить при создании , например CREATE TABLE в опциях имеется FOREIGN KEY , который настраивается на поле типа PRIMARY KEY в основной таблице .
Если связь между таблицами установлена , то удаление в подчиненной таблице производится автоматически.

На практике такое не всегда желательно .

В приложениях, которые используют базу данных только для хранения информации желательно предусмотреть такие операции : создание уникальных ключей ( в Access тип поля СЧЕТЧИК имеется , а MS SQL Server такого типа поля уже нет ) ; проверка на корректность вводимых данных и соответствие их типа либо перевод в нужный тип данных ; каскадное удаление записей в связанных таблицах с проверкой на возможность такого удаления - не всегда удаление основной записи и каскадом подчиненных правильно , особенно в бухгалтерских приложениях .

В этом случае в самой базе не настраиваются никакие связи , а за всем следит программа .

В моей практике я избегаю таких вариантов - выполняю проверку в подчиненных таблицах ( в последней программе было пять уровней вложения ) и предлагаю пользователю сначала удалить движение и т.д.

С уважением.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 5-ый класс)
Ответ отправлен: 19.09.2006, 16:27
Оценка за ответ: 5

Отвечает: Игорь Елизаров
Здравствуйте, Герасименко Алексей Анатольевич!
Лучше все-таки проверит наличие данных в НУЖНОЙ связанной таблице и удалить их, после этого удалить запись из исходной таблицы.
Просто вполне возможен вариант, что это ключевое поле является общим для нескольких таблиц, в этом случае удаляя, скажем, запись о номере телефона сотрудника можно запросто грохнуть всю информацию о сотруднике..

С уважением, Игорь
Ответ отправил: Игорь Елизаров (статус: 6-ой класс)
Ответ отправлен: 19.09.2006, 18:09


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное