Sobes.tech
Junior

Como são configuradas as relações entre tabelas em bancos de dados relacionais?

sobes.tech IA

Resposta da IA

Nos bancos de dados relacionais, as relações entre tabelas são configuradas usando chaves estrangeiras (Foreign Keys).

Uma chave estrangeira é uma coluna ou conjunto de colunas numa tabela que faz referência à chave primária (Primary Key) de outra tabela. Ela estabelece uma ligação lógica entre os registos de duas tabelas.

Ao configurar a relação:

  1. Define-se a chave primária na tabela "pai" (Parent). A chave primária identifica de forma única cada registo.
  2. Na tabela "filho" (Child), cria-se uma coluna (ou conjunto de colunas) que servirá como chave estrangeira.
  3. Esta coluna na tabela "filho" liga-se à chave primária da tabela "pai".
  4. São estabelecidas restrições de integridade de dados:
    • REFERENCES: Indica a qual tabela e coluna (chave primária) a chave estrangeira faz referência.
    • ON UPDATE behavior: Define o que acontece com os registos na tabela filha quando a chave primária na tabela pai é alterada. As opções incluem:
      • CASCADE: As alterações aplicam-se em cascata aos registos filhos.
      • SET NULL: Os valores da chave estrangeira na tabela filha são definidos como NULL.
      • RESTRICT: A operação de alteração é proibida se existirem registos filhos relacionados.
      • NO ACTION: Semelhante a RESTRICT na maioria dos SGBD.
      • SET DEFAULT: Os valores da chave estrangeira são definidos para o valor padrão.
    • ON DELETE behavior: Define o que acontece com os registos na tabela filha ao eliminar registos na tabela pai. As opções são as mesmas que para ON UPDATE.

Exemplo de sintaxe SQL para criar uma relação:

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, -- Chave primária na tabela Customer
    customer_name VARCHAR(255)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT, -- Chave estrangeira que faz referência a customer_id na tabela Customers
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
    ON UPDATE CASCADE -- Quando o customer_id em Customers for alterado, também será alterado em Orders
    ON DELETE CASCADE -- Quando um Customer for eliminado, os seus Orders relacionados também serão eliminados
);

Tipos de relações entre tabelas:

Tipo de relação Descrição Exemplo
Um-para-Um (1:1) Uma entrada na primeira tabela corresponde a uma entrada na segunda e vice-versa. Caso pouco comum em bases de dados relacionais. Utilizador e o seu perfil.
Um-para-Muitos (1:N) Uma entrada na primeira tabela corresponde a múltiplas entradas na segunda, mas cada entrada na segunda corresponde apenas a uma na primeira. Cliente e os seus pedidos.
Muitos-para-Muitos (N:M) Múltiplas entradas na primeira tabela correspondem a múltiplas na segunda, e vice-versa. Implementa-se através de uma tabela intermédia (de ligação). Produtos e categorias.

Para a relação Many-to-Many, cria-se uma terceira tabela que contém chaves estrangeiras de ambas as tabelas a relacionar.

CREATE TABLE Products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(255)
);

CREATE TABLE Categories (
    category_id INT PRIMARY KEY,
    category_name VARCHAR(255)
);

CREATE TABLE ProductCategories ( -- Tabela de ligação
    product_id INT,
    category_id INT,
    PRIMARY KEY (product_id, category_id), -- Chave primária composta
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);