powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / IG many to many
6 сообщений из 6, страница 1 из 1
IG many to many
    #39962518
iv_roman_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Предметная область вымешленная. Отношение Многие ко Многим.
Две сущности Люди и Компании, свзанные таблицей Люди_Компаии, показывает сколько денег заработал человек в конкретной компании.
У Комании есть Тип.
Один человек может работать в разных Компаниях одного Типа.
В одной Комании может работать несколько Людей.
Один сотрудник может в разных компаниях одного типа заработать разное количество денег.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE PEOPLE
   (	ID NUMBER, 
	NAME VARCHAR2(20 BYTE), 
	C_TYPE VARCHAR2(20 BYTE)
   ) 

CREATE TABLE COMPANY
   (	ID NUMBER, 
	C_TYPE VARCHAR2(20 BYTE), 
	C_NAME VARCHAR2(20 BYTE)
   )

CREATE TABLE P_C
   (	ID NUMBER, 
	P_ID NUMBER, 
	C_ID NUMBER, 
	COAST NUMBER
   )



Запрос для IG:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
    p.id as p_ID, c.id as c_ID,pc.id as pc_ID,
    p.name as p_name, c.c_type as c_type, pc.coast
from 
    people p
left join company c on p.c_type = c.c_type
left join p_c pc on p.id = pc.p_id and c.id = pc.c_id;



Менеджер будет работать с IG и проставлять сумму, которую человек заработал в конкретной компании.
Проблема в том, что для IG нет уникального столбца:
ID людей и компаний могут повторятся в данном запросе(тк М:М);
ID Люди_Компаии может быть NULL, так как нет записи о том сколько он заработал.

Заработанную сумму проставляют в IG, после чего должна создаваться запись в таблице Люди_Компаии.
Запись в таблице Люди_Компаии создается, но IG не может корректно это отрендерить так как нет уникального поля.

Я решил эту проблему тем, что создал суррогатное поле Человек_Компания, так как один человек может в одной компании получить только одну зарплату.

Кто сталкивался с реализацией М:М в IG, прошу откомментировать, может есть что то более изящное.

Спасибо!
...
Рейтинг: 0 / 0
IG many to many
    #39962830
=nomad=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем такой гемморой. Просто создайте в IG еще hidden поле ROWID типа ROWID и повесьте на него PK. Тогда IG корректно будет работать в режиме EDIT.
...
Рейтинг: 0 / 0
IG many to many
    #39962954
=nomad=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя тут подумал, нужно будет создать вьюху и повесить на нее instead of триггер. И уж использовать вьюху в IG и, как я писал, добавить ROWID для добавления возможности редактирования.
...
Рейтинг: 0 / 0
IG many to many
    #39962959
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROWID и если надо использовать PL/SQL
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
begin
    case :APEX$ROW_STATUS
    when 'C' then
        insert into emp ( empno, ename, deptno )
        values ( :EMPNO, :ENAME, :DEPTNO )
        returning rowid into :ROWID;
    when 'U' then
        update emp
           set ename  = :ENAME,
               deptno = :DEPTNO
         where rowid  = :ROWID;
    when 'D' then
        delete emp
         where rowid = :ROWID;
    end case;
end;
...
Рейтинг: 0 / 0
IG many to many
    #39963225
iv_roman_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel,

ROWID по какой их трех таблиц?
Люди и Компании не уникальны, и ROWID у них будут одинаковы.
А у Люди_Компании может быть так что NULL, когда сотрудник работал в компании а зп еще не проставили.

Со вьюхой пока не пробовал, но думаю там такой же эффект будет.
...
Рейтинг: 0 / 0
IG many to many
    #39963247
=nomad=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROWID не может быть одинаковый. Прочитайте, что такое ROWID у Oracle.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / IG many to many
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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