2017-01-21 3 views
0

У меня есть много таблиц в моей базе данных, но моя проблема касается, этих двух таблиц:Oracle SQL Удалить запись, не затрагивая дочерние таблицы

ERD .

Definiton из них является:

Employee (EmployeeID_PK, FirstName, LastName, Email, ...) 
Order (OrderID_PK, EmployeeID_FK, OrderDate, MenuID, ...) 

*_PK = Primary Key 
*_FK = Foreign Key 

Теперь я хочу удалить Служащий так, что он не в состоянии войти больше, но мне еще нужно, чтобы его приказы и его атрибуты (например, FirstName, Фамилия, ...).

Таким образом, данные должны оставаться в таблицах, но сотрудник больше не сможет входить в систему.

Я знаю, что добавление столбца 'isactive' к Employee будет решением, но я не думаю, что это лучший способ сделать это. Пожалуйста, скажите мне, так или иначе, если это единственный способ сделать это.

Заранее благодарен!

+1

Как мешает пользователю от входа в связанных каким-либо образом содержимое таблиц в базе данных? Блокировка учетной записи пользователя не имеет ничего общего с строками в таблице. – mathguy

ответ

-1

Как вы сказали, один из вариантов должен содержать столбец status - 1 для активных, 0 для неактивных, 2 для заблокированного входа.

Если вы не хотите использовать этот подход, вы можете создать копию как первичных, так и вторичных таблиц (и Order_Archive с эквивалентными ограничениями pk и fk) и переместить оба набора данных там. Таким образом, пользователь больше не может входить в систему, данные не теряются и целостность сохраняется.

Если есть слишком много данных в таблице Order, хотя вы можете оставить только первый подход слева - добавить столбец status.

+0

Итак, вы имеете в виду, что если я хочу удалить сотрудника, чтобы он больше не мог войти в систему, я удаляю только запись из таблицы active_employees? – Stjubit

+0

Поверьте, вы не сможете удалить какую-либо запись в активных сотрудниках, если есть ограничение fk. Следовательно, вам нужно будет также переместить заказы в таблицу архива. То есть не удалять, перемещать данные. И когда вы перемещаете сотрудников, вам может потребоваться переместить данные для заказов, а также из-за ограничения fk. Вот почему я сказал, что добавление столбца статуса и изменение реализации приложения для поиска статуса - это гораздо лучшая идея. –

+0

Хорошо, спасибо за быстрый ответ. Я также попробовал «подход 2-го стола», но я думаю, что это лучший способ добавить активный столбец. Благодаря :) – Stjubit

1

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

Скорее, это точно для чего «блокировка учетных записей пользователей». Вы можете заблокировать учетную запись пользователя, чтобы он или она больше не могли войти в систему, но ее или ее схема (то есть все ее объекты, такие как таблицы, индексы, представления и т. Д.) Остаются такими же, как они.

https://docs.oracle.com/database/121/ADMQS/GUID-6A8D4A59-6DB2-4662-BA4C-05B914D31B4F.htm#ADMQS12042

https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4003.htm#SQLRF01103

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