Как виртуально удалить данные из нескольких таблиц, связанных внешним ключом? - PullRequest
1 голос
/ 15 марта 2010

alt text

Я использую Sql Server 2005

Это часть моей схемы базы данных. Я хочу выполнить удаление в моей базе данных, которая начнется с tblDomain до tb tSbSubTopics.

Учтите, что в каждой таблице есть столбец IsDeleted, который должен быть помечен как true, если был сделан запрос на удаление данных. Но эти данные должны оставаться физически.

Таблицы, которые будут иметь столбец IsDeleted:

tblDomain tblSubject tblTopic tblSubTopic

Теперь я хочу, чтобы, если пользователь пометил один домен как удаленный, тогда все поля refrence также должны быть помечены как удаленные. т.е.

1 домен относится к 5 предметам, эти 5 предметов относятся к 25 темам, эти 25 тем относятся к 500 подтемам и так далее.

Тогда как мне пометить все эти поля как удаленные?

Ответы [ 2 ]

1 голос
/ 15 марта 2010

Зачем вам нужно обновлять поле 'isDeleted' во всех таблицах? Мой совет - обновить значение в основной таблице. Когда вы хотите проверить, если предмет. Тема или подтема относится к «удаленному» домену. Вы можете получить доступ к данным с помощью соответствующего представления:

SELECT Tbl_Subject.*, Tbl_Domain.isDeleted FROM Tbl_Subject INNER JOIN Tbl_Domain ON ...
1 голос
/ 15 марта 2010

Краткий ответ: вы, вероятно, не должны. Вместо этого, если домен помечен как удаленный, ваше приложение должно быть в состоянии определить, что вся вспомогательная информация, следовательно, удалена. В противном случае вы повторяете себя и денормализуете свой дизайн базы данных.

Если это нецелесообразно, вы можете обработать каскадное удаление в TRIGGER на tblDomain.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...