No contexto dos bancos de dados relacionais, uma chave estrangeira (em inglês, foreign key) ou chave externa é uma restrição que exige que os valores de uma coluna (ou de um grupo de colunas) correspondam a valores existentes em alguma linha de outra tabela. Com isso, mantém-se a integridade referencial entre as duas tabelas.
Por exemplo, dadas uma tabela de produtos e uma tabela de pedidos, pode-se garantir que a tabela de pedidos contenha apenas pedidos de produtos que existem, definindo uma chave estrangeira na tabela de pedidos que referencia a tabela de produtos:
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products (product_no),
quantity integer
);
Se a lista de colunas referenciadas for omitida, a chave primária da tabela referenciada é usada.
Quando uma linha referenciada é excluída ou alterada, o comportamento é definido pelas ações ON DELETE e ON UPDATE (como CASCADE, RESTRICT ou SET NULL). Veja integridade referencial.