powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как реализовать связь один ко многим в одной таблице?
7 сообщений из 7, страница 1 из 1
Как реализовать связь один ко многим в одной таблице?
    #39818374
AnnitaBells
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для сущности А может существовать много сущностей Б. Но одно и тоже Б не может быть связанным с разными А. Ещё есть сущность В, которой может быть много для сущности А.
...
Рейтинг: 0 / 0
Как реализовать связь один ко многим в одной таблице?
    #39818375
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Connected to Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 
Connected as big3@//server:11521/XE

SQL> drop table test;

Table dropped


SQL> create table test (id number, ida number, idb number);

Table created


Sin
SQL> insert into test values(1, 100, 200);

1 row inserted


SQL> insert into test values(2, 200, 200);

1 row inserted



SQL> insert into test values(100, null, null);

1 row inserted


SQL> insert into test values(200, null, null);

1 row inserted


SQL> commit;

Commit complete


SQL> 

...
Рейтинг: 0 / 0
Как реализовать связь один ко многим в одной таблице?
    #39818380
AnnitaBells
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

как защитить себя от того, чтобы сущность Б связана с разными А?
...
Рейтинг: 0 / 0
Как реализовать связь один ко многим в одной таблице?
    #39818402
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBells,

Откуда желание всё совать в одну таблицу?
Сходу напрашивается одна главная и две подчиненные таблицы.

Если же исходные ограничения по каким-то причинам критичны, то как заготовка (А,Б,В -> A,B,C):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table single_table
(
  id int,
  type varchar2(1),
  ref_id int,
  ref_type varchar2(1),
  constraint chk_type check (type in ('A','B','C')),
  constraint chk_ref_type check (ref_type in ('A')),
  constraint chk_a check (type not in ('A') or ref_type is null),
  constraint pk_single_table primary key (id, type),
  constraint fk_single_table foreign key (ref_id, ref_type) references single_table (id, type)
)


Здесь есть ораничение, что сущность А не может быть подчиненной, но нет ограничения на обязательное наличие родителя для сущности B или C.
...
Рейтинг: 0 / 0
Как реализовать связь один ко многим в одной таблице?
    #39818406
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBellsкак защитить

Не хватает констрейнтов для логики, используйте триггеры.
Или просто в коде, заполняющем таблицы, делайте проверки.
...
Рейтинг: 0 / 0
Как реализовать связь один ко многим в одной таблице?
    #39818841
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBellsкак защитить себя от того, чтобы сущность Б связана с разными А?
Обычный FK не подходит?
...
Рейтинг: 0 / 0
Как реализовать связь один ко многим в одной таблице?
    #39818900
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBells,

ID ParentID остальные поля1NULL .....21 .....31 .....42 .....52 .....6NULL .....71 .....81 .....
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как реализовать связь один ко многим в одной таблице?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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