Getting Foreign Keys on Tables in Snowflake
Entity Relationship (ER) Diagram with Primary Keys and Foreign Key constraints
Create tables with Foreign Keys in Snowflake
use scratch.saqib_ali;
create or replace table customers(
customer_id int
, name string
, constraint primary_key primary key (customer_id));
create or replace table customer_address(
customer_id int
, name string
, CONSTRAINT customer_foreing_key FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);
create or replace table items(
item_id int
, item_description string
, constraint primary_key primary key (item_id));
create or replace table orders(
order_id int
, customer_id int
, item_id int
, CONSTRAINT customer_foreing_key FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
, constraint item_foreign_key FOREIGN KEY (item_id) references items(item_id));
Query to show foreign keys in the Schema
SHOW IMPORTED KEYS;
SHOW EXPORTED KEYS;
created_on | pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_sequence | update_rule | delete_rule | fk_name | pk_name | deferrability | rely | comment |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2023-05-20 08:33:08.878 -0700 | SCRATCH | SAQIB_ALI | CUSTOMERS | CUSTOMER_ID | SCRATCH | SAQIB_ALI | CUSTOMER_ADDRESS | CUSTOMER_ID | 1 | NO ACTION | NO ACTION | CUSTOMER_FOREING_KEY | PRIMARY_KEY | NOT DEFERRABLE | FALSE | |
2023-05-20 08:33:09.843 -0700 | SCRATCH | SAQIB_ALI | CUSTOMERS | CUSTOMER_ID | SCRATCH | SAQIB_ALI | ORDERS | CUSTOMER_ID | 1 | NO ACTION | NO ACTION | CUSTOMER_FOREING_KEY | PRIMARY_KEY | NOT DEFERRABLE | FALSE | |
2023-05-20 08:33:09.843 -0700 | SCRATCH | SAQIB_ALI | ITEMS | ITEM_ID | SCRATCH | SAQIB_ALI | ORDERS | ITEM_ID | 1 | NO ACTION | NO ACTION | ITEM_FOREIGN_KEY | PRIMARY_KEY | NOT DEFERRABLE | FALSE |
Query to show all the foreign keys in a table
SHOW IMPORTED KEYS in scratch.saqib_ali.orders;
created_on | pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_sequence | update_rule | delete_rule | fk_name | pk_name | deferrability | rely | comment |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2023-05-20 08:33:09.843 -0700 | SCRATCH | SAQIB_ALI | CUSTOMERS | CUSTOMER_ID | SCRATCH | SAQIB_ALI | ORDERS | CUSTOMER_ID | 1 | NO ACTION | NO ACTION | CUSTOMER_FOREING_KEY | PRIMARY_KEY | NOT DEFERRABLE | FALSE | |
2023-05-20 08:33:09.843 -0700 | SCRATCH | SAQIB_ALI | ITEMS | ITEM_ID | SCRATCH | SAQIB_ALI | ORDERS | ITEM_ID | 1 | NO ACTION | NO ACTION | ITEM_FOREIGN_KEY | PRIMARY_KEY | NOT DEFERRABLE | FALSE |
Query to show all the tables that use a Primary Key from a given table in a Foreign Key constraint
SHOW EXPORTED KEYS in scratch.saqib_ali.customers;
created_on | pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_sequence | update_rule | delete_rule | fk_name | pk_name | deferrability | rely | comment |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2023-05-20 08:33:08.878 -0700 | SCRATCH | SAQIB_ALI | CUSTOMERS | CUSTOMER_ID | SCRATCH | SAQIB_ALI | CUSTOMER_ADDRESS | CUSTOMER_ID | 1 | NO ACTION | NO ACTION | CUSTOMER_FOREING_KEY | PRIMARY_KEY | NOT DEFERRABLE | FALSE | |
2023-05-20 08:33:09.843 -0700 | SCRATCH | SAQIB_ALI | CUSTOMERS | CUSTOMER_ID | SCRATCH | SAQIB_ALI | ORDERS | CUSTOMER_ID | 1 | NO ACTION | NO ACTION | CUSTOMER_FOREING_KEY | PRIMARY_KEY | NOT DEFERRABLE | FALSE |