Может ли столбец таблицы ссылаться на эту же таблицу?
В описании задания есть описание таблицы:
-- Таблица каталога продуктов
create table catalog (
cid number primary key, -- id раздела
par_cid number references catalog, -- ссылка на родительский раздел
rname varchar2(400), -- наименование раздела
rdescr varchar2(4000), -- описание
rcdate date -- дата создания
);
Правильно ли написан код создания таблицы catalog в строке:
par_cid number references catalog, -- ссылка на родительский раздел
Может ли столбец таблицы catalog ссылаться на эту же таблицу catalog?
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Может ли столбец таблицы
catalogссылаться на эту же таблицуcatalog?
Да, может. Это ссылка таблицы на саму себя.
Точнее, будет создан внешний ключ (foreign key=FK), ссылающийся (references) на первичный ключ (primary key=PK) этой же таблицы. Последний можно по умолчанию не указывать, так как он гарантированно только один в таблице.
Полная запись (рекомендованный способ записи) выглядела бы так:
create table catalog (
cid number primary key,
par_cid number,
rname varchar2(400),
rdescr varchar2(4000),
rcdate date,
constraint fk_catalog foreign key (par_cid) references catalog (cid))
/
Простейший пример данных и типичный запрос с ними:
insert into catalog
select 1, null, 'catalog1', 'main catalog', sysdate from dual union all
select 2, 1, 'catalog2', 'under catalog1', sysdate from dual union all
select 3, 1, 'catalog3', 'under catalog1', sysdate from dual
/
select cid, par_cid, rname name, lpad (' ', (level-1)*4)||rdescr descr
from catalog
start with par_cid is null
connect by par_cid = prior cid
/
CID PAR_CID NAME DESCR
---------- ---------- -------- --------------------------------
1 catalog1 main catalog
2 1 catalog2 under catalog1
3 1 catalog3 under catalog1