2012-05-15 4 views
0

Утра,Удалить из таблицы с внешним ключом

У меня есть три таблицы:

Таблицы: должники

id   - INT(11) 
type   - ENUM('c', 'p') 

Таблицы: Фирмы

id   - INT(11) 
debtor_id - INT(11) 
and a lot of other fields for companies 

Таблица: private_individuals

id   - INT(11) 
debtor_id - INT(11) 
and a lot of other fields for private individuals 

иностранный КЛЮЧ SQL для компаний (такой же используются для частных лиц):

INDEX `fk_private_individual_debtors1` (`debtor_id` ASC) , 
    CONSTRAINT `fk_private_individual_debtors1` 
    FOREIGN KEY (`debtor_id`) 
    REFERENCES `application_user`.`debtors` (`id`) 
    ON DELETE CASCADE 
    ON UPDATE NO ACTION) 

Когда я удалить компанию или частное лицо, я хочу должник быть удален, а также и он должен работать наоборот а также удаляется должник и компания или частное лицо).

Подумываю сделать это с помощью триггера, но я полагаю, что есть лучший способ сделать это ..

Может кто-нибудь помочь, пожалуйста?

+1

Неплохая идея. Хотя иногда может произойти удаление должника, я сомневаюсь, что крупный банк захочет быть уничтоженным из-за того, что один из их займов был уволен. –

+0

Удаление должника, компании или частного лица не возможно (скрытие ...) в рамках обычного графического интерфейса или с обычным пользователем MySQL. Поэтому ошибки при неправильном щелчке или что-то в этом роде вряд ли произойдут. Но когда компания удаляется, неверно оставлять должника, поскольку должник является либо компанией, либо частным лицом. –

ответ

1

Удалить должника и компания или частное лицо удаляется, как хорошо:

Это может быть сделано путем ON DELETE CASCADE. Этот параметр указывается при определении внешнего ключа и применяется ко всем удалениям в таблице. Вы не можете упомянуть об этом на индивидуализированном уровне DELETE. См. FOREIGN KEY Constraints в руководстве по MySql. Помните, что это опасно в большинстве случаев, и вам лучше иметь эту логику в коде приложения.

Когда я удалить компанию или частное лицо, я хочу должнику быть удален, а

Это напрямую не возможно. Вы создали отношения между ключевыми клиентами и должником, но может быть более одной компании, связанной с должником. Во внешнем ключе ничего не мешает. У вас может быть дополнительная логика приложения (в процедуре, в коде java/C#, в триггерах), но на уровне внешнего ключа вообще ничего нет. Так как это достигается дополнительной логикой приложения, для удаления также потребуется дополнительная логика приложения. Еще один момент, который следует обратить внимание: вы должны удалить [arent, только если все его дочерние записи удалены.

Смежные вопросы