Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > что делает constraint


Автор: крылья 25.4.2015, 23:11
ребят объясните очень простым понятным языком что такое  constraint, для чего он нужен, что он делает, желательно на примере с пояснением............
у меня есть первичное поле id и к нему привязаны записи parent, моя таблица имеет иерархичную структуру, дело в том что если я удалю любое id поле то привязанные записи потеряются, ну тупо память засорять будут, мне нужно сделать ограничение чтобы для начало нужно было удалить все привязанные записи а потом самого родителя!!!



Автор: Zloxa 26.4.2015, 13:06
Цитата(крылья @  26.4.2015,  00:11 Найти цитируемый пост)
мне нужно сделать ограничение чтобы для начало нужно было удалить все привязанные записи а потом самого родителя!!

О. И объяснять ничего не надо именно эту функцию и выполняет foreign key constraint (ограничение внешнего ключа)

Автор: Akina 26.4.2015, 21:47
Цитата(крылья @  26.4.2015,  00:11 Найти цитируемый пост)
что такое  constraint

Условие на значение. При его невыполнении в проведении операции с данными будет отказано.

Автор: крылья 27.4.2015, 11:06
дело в том что у меня одна таблица, как бы мне не нужен внешний ключ
у меня это в одной таблице выражена, структура иерархичная....ну типа у меня есть id поле и еще есть поле parent , так вот, полt parent хранит в себе значения id номера, ия я не могу удалить id если в поле parent имеется его значение 

Автор: Akina 27.4.2015, 11:19
Правильно. У тебя есть условие на значение - у записи должен быть родитель, или там должно быть NULL (родителя нет, запись является корнем). Поэтому операция удаления родителя не может быть выполнена, пока у него есть хоть один потомок - следует всех потомков или удалить, или приписать к другим родителям, или сделать корневыми, и только потом удалять.

Добавлено через 1 минуту и 15 секунд
Так что внешний ключ - нужен.

PS. Внешний - это не означает, что строго на другую таблицу. Можно и на себя - но всегда на другой индекс.

Автор: Zloxa 27.4.2015, 11:37
Код

SQL> create table hier_example
  2  (
  3      id number primary key,
  4      parent_id number references hier_example(id)
  5  );
Table created
SQL> insert into hier_example(id, parent_id) values (1, null);
1 row inserted
SQL> insert into hier_example(id, parent_id) values (2, 1);
1 row inserted
SQL> delete from hier_example where id = 1;
delete from hier_example where id = 1
ORA-02292: integrity constraint (COM.SYS_C0018465) violated - child record found


PS. Если из таблицы предполагается возможность удаления, parent_id было бы неплохо индексировать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)