Я хотел бы получить имена таблиц из заданной схемы в отсортированном порядке на основе их зависимостей от внешнего ключа. Например, если у меня есть три следующие таблицы, созданные в Snowflake
CREATE TABLE TAB_X
(
COL_A CHAR(18),
COL_B CHAR(18),
COL_C CHAR(18),
CONSTRAINT XPKTAB_X PRIMARY KEY (COL_A, COL_B)
);
CREATE TABLE TAB_Z
(
COL_D CHAR(18),
COL_E CHAR(18),
COL_F CHAR(18),
COL_G CHAR(18),
COL_A CHAR(18),
COL_B CHAR(18),
CONSTRAINT XPKTAB_Z PRIMARY KEY (COL_D, COL_E, COL_A, COL_B),
CONSTRAINT R_1 FOREIGN KEY (COL_A, COL_B) REFERENCES TAB_X (COL_A, COL_B)
);
CREATE TABLE TAB_B
(
COL_H CHAR(18),
COL_I CHAR(18),
COL_J CHAR(18),
COL_K CHAR(18),
COL_D CHAR(18),
COL_E CHAR(18),
COL_A CHAR(18),
COL_B CHAR(18),
CONSTRAINT XPKTAB_B PRIMARY KEY (COL_H, COL_I, COL_D, COL_E, COL_A, COL_B),
CONSTRAINT R_2 FOREIGN KEY (COL_D, COL_E, COL_A, COL_B) REFERENCES TAB_Z (COL_D, COL_E, COL_A, COL_B)
);
В этом сценарии, если я выполню запрос SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES;
, он вернет мне имена таблиц в алфавитном порядке, что будет.
TAB_B
TAB_X
TAB_Z
Но я хочу правильный порядок создания, то есть:
TAB_X
TAB_Z
TAB_B
Любая помощь с этим будет очень признательна.
Обновление: я не могу достигните этого, сортируя имена таблиц на основе метки времени CREATION, например, если я создаю таблицы следующим образом:
CREATE TABLE TAB_A
(
COL_1 CHAR(18),
COL_2 CHAR(18),
COL_3 CHAR(18),
COL_6 CHAR(18),
COL_8 CHAR(18),
COL_12 CHAR(18)
);
ALTER TABLE TAB_A
ADD CONSTRAINT XPKCOL_C PRIMARY KEY (COL_1, COL_2, COL_3, COL_6, COL_8);
CREATE TABLE TAB_C
(
COL_1 CHAR(18),
COL_2 CHAR(18),
COL_3 CHAR(18),
COL_6 CHAR(18),
COL_8 CHAR(18),
COL_11 CHAR(18)
);
ALTER TABLE TAB_C
ADD CONSTRAINT XPKCOL_X PRIMARY KEY (COL_1, COL_2, COL_3, COL_6, COL_8);
CREATE TABLE TAB_O
(
COL_1 CHAR(18),
COL_2 CHAR(18),
COL_3 CHAR(18),
COL_6 CHAR(18),
COL_8 CHAR(18),
COL_12 CHAR(18)
);
ALTER TABLE TAB_O
ADD CONSTRAINT XPKCOL_A PRIMARY KEY (COL_1, COL_2, COL_3, COL_6, COL_8);
CREATE TABLE TAB_X
(
COL_1 CHAR(18),
COL_2 CHAR(18),
COL_3 CHAR(18),
COL_4 CHAR(18),
COL_5 CHAR(18)
);
ALTER TABLE TAB_X
ADD CONSTRAINT XPKTAB_A PRIMARY KEY (COL_1, COL_2, COL_3);
CREATE TABLE TAB_Z
(
COL_1 CHAR(18),
COL_2 CHAR(18),
COL_3 CHAR(18),
COL_6 CHAR(18),
COL_8 CHAR(18),
COL_9 CHAR(18),
COL_0 CHAR(18)
);
ALTER TABLE TAB_Z
ADD CONSTRAINT XPKTAB_Z PRIMARY KEY (COL_1, COL_2, COL_3, COL_6, COL_8);
ALTER TABLE TAB_A
ADD CONSTRAINT R_4 FOREIGN KEY (COL_1, COL_2, COL_3, COL_6, COL_8) REFERENCES TAB_C (COL_1, COL_2, COL_3, COL_6, COL_8);
ALTER TABLE TAB_C
ADD CONSTRAINT R_2 FOREIGN KEY (COL_1, COL_2, COL_3, COL_6, COL_8) REFERENCES TAB_Z (COL_1, COL_2, COL_3, COL_6, COL_8);
ALTER TABLE TAB_O
ADD CONSTRAINT R_3 FOREIGN KEY (COL_1, COL_2, COL_3, COL_6, COL_8) REFERENCES TAB_C (COL_1, COL_2, COL_3, COL_6, COL_8);
ALTER TABLE TAB_Z
ADD CONSTRAINT R_1 FOREIGN KEY (COL_1, COL_2, COL_3) REFERENCES TAB_X (COL_1, COL_2, COL_3);