Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как реализовать связь один ко многим в одной таблице? / 7 сообщений из 7, страница 1 из 1
26.05.2019, 14:35
    #39818374
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один ко многим в одной таблице?
Для сущности А может существовать много сущностей Б. Но одно и тоже Б не может быть связанным с разными А. Ещё есть сущность В, которой может быть много для сущности А.
...
Рейтинг: 0 / 0
26.05.2019, 14:44
    #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
26.05.2019, 14:55
    #39818380
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один ко многим в одной таблице?
dmdmdm,

как защитить себя от того, чтобы сущность Б связана с разными А?
...
Рейтинг: 0 / 0
26.05.2019, 16:11
    #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
26.05.2019, 16:27
    #39818406
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один ко многим в одной таблице?
AnnitaBellsкак защитить

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

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


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