powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по кеу preserved tables
6 сообщений из 6, страница 1 из 1
Вопрос по кеу preserved tables
    #32164706
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно ли я поняла что key-preserved table во вью может быть только одна. Явно в доке и книге это не увидела. Или их может быть несколько если имеет место отношения 1:1?

Например в следующей вьхе

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create or replace view dept_emp as
select
dept.id as dept_id,
dept.name as dept_name,
emp.id as emp_id,
emp.name as emp_name,
emp.salary as emp_salary,
emp.dept_id as emp_dept_id
from dept, emp
where dept.id = emp.dept_id and
emp.salary >  3000 ;


таблица dept не является key-preserved потому что записи dept во вью повторяются.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select column_name, updatable, insertable, deletable from user_updatable_co
lumns where table_name='DEPT_EMP';

COLUMN_NAME                    UPD INS DEL
 ------------------------------ --- --- ---
 
DEPT_ID                        NO  NO  NO
DEPT_NAME                      NO  NO  NO
EMP_ID                         YES YES YES
EMP_NAME                       YES YES YES
EMP_SALARY                     YES YES YES
EMP_DEPT_ID                    YES YES YES

 6  rows selected.
...
Рейтинг: 0 / 0
Вопрос по кеу preserved tables
    #32164721
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создат вью ты можешь с несколькими тамими таблицами.
Сможешь использовать SQL-запросы.
Но использовать для DML такой вью - не сможешь.
...
Рейтинг: 0 / 0
Вопрос по кеу preserved tables
    #32164732
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточняющие вопросы.

1) Является в мое примере таблица dept key-preserved?

2) Создат вью ты можешь с несколькими тамими таблицами.
То есть в одном вью может быть несколько key preserved tables?

3) Но использовать для DML такой вью - не сможешь.
То есть если во вью несколько key preserved tables то DML не разрешается?

4) Как создать отношение 1:1? Повесить unique constraint на столбец который есть foreign key?
...
Рейтинг: 0 / 0
Вопрос по кеу preserved tables
    #32164788
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопросы 1) и 2) сняты, нашла хорошее объяснение key preserved table

Таблица во view является key preserved если ее первичный ключ может также служить первичный ключом для всего view.

А вот пример view с двумя key preserved table так и не смогла придумать.
...
Рейтинг: 0 / 0
Вопрос по кеу preserved tables
    #32164811
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"А вот пример view с двумя key preserved table так и не смогла придумать"

to Violina:

Не хватает фантазии? :)

Представь таблицу сотрудников, и таблицу отделов. Представь что в каждом отделе только один сотрудник.

create view v_emp_1 as
select
e.empno, d.deptno
from
emp e,
dept d
where
e.deptno = d.deptno;


Вот тебе и вью с двумя табицами key-preserved.
...
Рейтинг: 0 / 0
Вопрос по кеу preserved tables
    #32164897
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тебе и вью с двумя табицами key-preserved.

Если бы это было так легко. В доке сказано

The key-preserving property of a table does not depend on the actual data in the table. It is, rather, a property of its schema.

А за совет спасибо. Копала я правильно - надо на emp.dept_id unique constraint повесить.

SQL> select column_name, updatable, insertable, deletable from user_updatable_columns where table_name='DEPT_EMP';

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
COLUMN_NAME                    UPD INS DEL
 ------------------------------ --- --- ---
 
DEPT_ID                        NO  NO  NO
DEPT_NAME                      NO  NO  NO
EMP_ID                         YES YES YES
EMP_NAME                       YES YES YES
EMP_SALARY                     YES YES YES
EMP_DEPT_ID                    YES YES YES

 6  rows selected.


Код: plaintext
1.
2.
3.
4.
5.
6.
SQL> alter table emp add constraint dptunq unique(dept_id);

Table altered.

SQL> alter view dept_emp compile;

View altered.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> select column_name, updatable, insertable, deletable from user_updatable_columns where table_name='DEPT_EMP';

COLUMN_NAME                    UPD INS DEL
 ------------------------------ --- --- ---
 
DEPT_ID                        YES YES YES
DEPT_NAME                      YES YES YES
EMP_ID                         YES YES YES
EMP_NAME                       YES YES YES
EMP_SALARY                     YES YES YES
EMP_DEPT_ID                    YES YES YES

 6  rows selected.


И так мы имеем view с двумя key preserved tables.

К теме но использовать для DML такой вью - не сможешь.

Проверила что можно

1) update на каждую таблицу по отдельности
2) insert в каждую по отдельности
3) delete - вот здесь интересно, всегда удаляется строка в dept. Если нет в foreign key опции on delete cascade ругается на нарушение integrity.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по кеу preserved tables
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]