Construção de Tabelas de Banco de Dados Bancário com SQL

Este artigo demonstra a criação de tabelas para um sistema bancário utilizando comandos SQL, partidno de um modelo Entidade-Relacionamento (E-R) e um modelo de banco de dados relacional. São definidas quatro tabelas principais: Cliente, Cartao, Transacao e Deposito, com relacioanmentos por chaves estrangeiras e inserção de dados de exemplo.

Tabela Cliente

CREATE TABLE Cliente (
    idCliente INT AUTO_INCREMENT COMMENT 'Identificador único do cliente',
    nomeCliente VARCHAR(100) NOT NULL COMMENT 'Nome completo do titular',
    cpf CHAR(11) NOT NULL COMMENT 'CPF (apenas dígitos)',
    telefone CHAR(11) NOT NULL COMMENT 'Telefone de contato',
    endereco VARCHAR(255) NULL COMMENT 'Endereço residencial',
    PRIMARY KEY (idCliente),
    UNIQUE INDEX idx_cpf (cpf)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Inserção de exemplo
INSERT INTO Cliente (nomeCliente, cpf, telefone, endereco)
VALUES ('Maria Silva', '12345678901', '11988887777', 'Rua das Flores, 123');

Tabela Deposito

CREATE TABLE Deposito (
    idDeposito VARCHAR(20) NOT NULL COMMENT 'Código do tipo de depósito',
    nomeDeposito VARCHAR(100) NOT NULL COMMENT 'Nome do tipo (ex: Poupança, Corrente)',
    descricao TEXT NULL COMMENT 'Descrição detalhada',
    PRIMARY KEY (idDeposito)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Inserção de exemplo
INSERT INTO Deposito (idDeposito, nomeDeposito, descricao)
VALUES ('POUP', 'Poupança', 'Conta com rendimento mensal');

Tabela Cartao

CREATE TABLE Cartao (
    numeroCartao CHAR(20) NOT NULL COMMENT 'Número do cartão (16-20 dígitos)',
    idDeposito VARCHAR(20) NOT NULL COMMENT 'Tipo de depósito associado',
    dataAbertura TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Data de abertura da conta',
    valorAbertura DECIMAL(18,2) NOT NULL COMMENT 'Valor depositado na abertura',
    saldo DECIMAL(18,2) NOT NULL COMMENT 'Saldo atual',
    senha VARCHAR(6) NOT NULL DEFAULT '888888' COMMENT 'Senha de 6 dígitos',
    perdaRelatada BIT NOT NULL DEFAULT 1 COMMENT '1 = não perdido, 0 = perdido/roubado',
    idCliente INT NOT NULL COMMENT 'Referência ao cliente',
    PRIMARY KEY (numeroCartao),
    CONSTRAINT fk_cartao_cliente FOREIGN KEY (idCliente) REFERENCES Cliente(idCliente),
    CONSTRAINT fk_cartao_deposito FOREIGN KEY (idDeposito) REFERENCES Deposito(idDeposito)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Inserção de exemplo
INSERT INTO Cartao (numeroCartao, idDeposito, valorAbertura, saldo, idCliente)
VALUES ('12345678901234567890', 'POUP', 1000.00, 1500.00, 1);

Tabela Transacao

CREATE TABLE Transacao (
    dataTransacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Data e hora da transação',
    numeroCartao CHAR(20) NOT NULL COMMENT 'Cartão utilizado',
    tipoTransacao VARCHAR(50) NOT NULL COMMENT 'Tipo: SAQUE, DEPOSITO, TRANSFERENCIA',
    valorTransacao DECIMAL(18,2) NOT NULL COMMENT 'Valor da transação',
    observacao TEXT NULL COMMENT 'Observações ou descrição',
    CONSTRAINT fk_transacao_cartao FOREIGN KEY (numeroCartao) REFERENCES Cartao(numeroCartao)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Inserção de exemplo
INSERT INTO Transacao (numeroCartao, tipoTransacao, valorTransacao, observacao)
VALUES ('12345678901234567890', 'SAQUE', 200.00, 'Saque no caixa eletrônico');

Tags: SQL MySQL banco de dados bancário criação de tabelas chave estrangeira

Publicado em 7-25 18:52